m_pImageBuffer转换到opencv的一种笨方法

来源:互联网 发布:网络女主播兼职 编辑:程序博客网 时间:2024/06/05 04:53

刚刚看opencv一段时间,这中方法可以将相机采集到的m_pImageBuffer(24位的buffer)转换成opencv C++ 版本的Mat再进一步进行处理图像。

本来我通过Mat的data指针获得这个buffer的数据,发现数据使用ImageWatch是有问题,是一些重复的有规律的图像,具体原因还不清楚。(也希望能有前辈指教一下)。

后来在这位博主的博文下,知道可以用旧版本的opencv中Iplmage* 获得buffer 的数据,

http://meiguiwuxinll.blog.163.com/blog/static/636798802009111555046861/

结果试试看,能够正常在ImageWatch上面显示,可以对这幅图像进步一处理了。

然后再将IplImage*指针转换成Mat类型的结构。

具体的实现方法如下:


CvSize cvSize;
cvSize.width = Width;
cvSize.height = Height;
//生成支持OPENCV的IPLIMAGE数据结构,并使用相机采集的图像数据初始化
IplImage *iplImage = cvCreateImageHeader(cvSize, IPL_DEPTH_8U, 3);
cvSetData(iplImage, m_pImageBuffer, Width * 3);
//申请灰度空间,将BGR格式转化为灰度数据
IplImage *iplgray = cvCreateImage(cvGetSize(iplImage), IPL_DEPTH_8U, 1);
cvCvtColor(iplImage, iplgray, CV_BGR2GRAY);
Mat srcImage = cvarrToMat(iplgray, true);


0 0