CvMat,Mat,Iplimage的理解和应用

2019-04-15 14:06发布

这个链接非常有用
http://www.cnblogs.com/Key-Ky/p/4150531.html 新手常用的一些转换:
1.CvMat*和Iplimage*的转换关系 CvMat* pic =cvLoadImageM("ubuntu.png"); IplImage*pic1=cvCreateImage(cvGetSize(pic),IPL_DEPTH_8U,3); //IplImage->cvmat //这个函数直接讲图像载入矩阵中 //cvmat*->iplimage* cvGetImage(pic,pic1); //iplimage*->cvmat* cvGetMat(pic1,pic); //iplimage*<->cvmat* cvConvert( pic,pic1 ); 2.CvMat*和Iplimage*->Mat(指针转换成矩阵)
这里要注意了,新旧版本的opencv的在这里的处理办法会不一样(wtf),可以参考链接:
http://www.cnblogs.com/edver/p/5187190.html 对于opencv3.0以上的版本,可以: //Cvmat*->mat(iplimage*同理) CvMat* pic=cvLoadImageM("ubuntu.png"); Mat pic1=cvarrToMat(pic); 对于老版的opencv可以: //Cvmat*->mat CvMat* pic=cvLoadImageM("ubuntu.png"); Mat a(pic); 3.mat->const cvarr*(矩阵转换成指针) //mat->const cvarr* CvMat* pic=cvLoadImageM("ubuntu.png"); Mat pic1=cvarrToMat(pic); const CvMat* s=(CvMat*) &pic1; 写代码的时候不要忘记上面的取值运算符&,先是取址,然后进行强制类型转换。 4.对于新手来说,理解CvMat和Mat的区别真的是wtf,看了很多资料,觉得最有用的是这个句子
CvMat* m=cvCreateMat(int cows,int cols,int types);
这里types可以是任意的预定义类型,如rgb或者是别的多通道的数据,这用的目的是让CvMat更好地表示一幅图像,而不是想只是像Mat一样只能用简单的基本数据类型。 总结:千里之行,始于足下!