1、使用的库类总结如下:
SapLocation类——设备的连接地址
SapAcquisition类——采集设备
SapBuffer类——缓存对象
SapTransfer类——传输对象
SapView类——显示缓存
其中需要注意的是SapAcquisition类操作的是与采集卡相连的设备,SapAcqDevice类操作的是直接与电脑相连的设备(如网口相机)
2、相机采集的控制
首先使用SapTransfer类创建指针对象*m_Xfer,之后进行如下控制:
开始采集:m_Xfer->Grab();
停止采集:m_Xfer->Freeze();
单张抓拍:m_Xfer->Snap();
3、参数获取
通过SapAcquisition类,可以获取一些参数,需要注意的是val的类型必须与featureName所对应的值类型一致,否则报错。
m_Acq->GetFeatureValue(featureName, out val));
常用参数统计如下:
4、SapBuffer类
SapBuffer类是图像处理中最重要的类,其中包含了具有相同维度、格式和类型的缓冲区资源。SapBuffer类对象可以使用SapView类显示并使用SapProcessing类处理。
程序中对SapBuffer类的图像定义了默认参数,如下图所示:
从上图中可以看出,默认的尺寸是640×480,位深8位,缓存数1张,
最常使用的构造函数如下:
SapBuffer(int count = SapDefBufferCount, int width = SapDefWidth, int height = SapDefHeight, SapFormat format = SapDefFormat, Type type = SapDefBufferType, SapLocation loc = SapLocation::ServerSystem);
构造函数的参数可以用结构体的形式统一赋值,而不必单独赋值。其中的宽高可以从ccf中设置,如果ccf没有指定,则默认大小640×480。
SapBuffer有3中创建方式:
① 通过指针创建,也是最常用的方式
SapBuffer *pBuffer = new SapBuffer(1, 640, 480); if (pBuffer->Create()) { // 对buffer进行处理 } //注意释放 if (*pBuffer) { pBuffer->Destroy(); //销毁缓存区资源 } delete pBuffer; //释放内存 pBuffer = NULL; //置位
② 堆栈上创建
SapBuffer buffer(1, 640, 480); if (buffer.Create()) { // 对buffer进行处理 // 如果buffer不再使用 buffer.Destroy(); //销毁缓存区资源 } //超出作用域,对象的内存自动销毁,不需要再手动销毁。
③ 从已有对象创建
从MFC的strFilePath的内存中创建 USES_CONVERSION; //CString 转char* char* image=T2A(strFilePath.GetBuffer(0)); m_Buffers=new SapBuffer(image); 释放参照方式①。
5、实战,参考我的github。
【参考】
https://www.cnblogs.com/lgyup/p/4313332.html
https://www.docin.com/p-44962289.html