您的位置:首页 > Web前端

m_pImageBuffer转换到opencv的一种笨方法

2016-03-29 23:46 483 查看
刚刚看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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv