看了好长时间的SDK是如何调用的,没有讲到如何将一帧数据如何进行保存以及进行处理。
在相机实际使用的过程之中,一般是USB相机。USB相机会调用什么Mat格式的数据,使用imwrite将一帧数据信息进行相应的写入。我就在想能不能将一帧数据缓存转换为Mat格式之后再进行保存呢。真的是想了好久,感觉很好弄出来,但是就是总是出现问题。
然后想了想什么cv::Mat的构造函数。
Mat m(10, 10, CV_8UC3, Scalar(125,10,100)); //CV_8UC3表示8位无符号char类型3个通道
//Scalar第四位参数表示初始化每个像素值是多少,向量长度对应通道数目
可以见到其中四个函数的含义分别是图片高、图像的宽、图像通道、图像像素值。
在查看SDK的时候,看到了这一行代码,这个地方frame.frameInfo.width代表图像的宽度。整好和第二个参数对应起来,说明思路是对的。此处,我的相机是黑白相机,因此是八位单通道的(CV_8UC1)。也就是最后一个参数还是不知道的,就点入frame函数之中看一看。
当然此时,我不确定是不是这个东西,然后.引用一下,之后就转换成功了。
ret = IMV_GetFrame(devHandle, &frame, 500);
srcImage = cv::Mat(frame.frameInfo.height, frame.frameInfo.width, CV_8UC1, frame.pData);
这一串代码可能不是适用于别的GIGE相机,但是基本思路都是差不多的。