使用opencv做图像处理时,iplimage*与mat互转用的特别多,所以就整理了一下:
(1)将IplImage类型转换到Mat类型
Mat::Mat(const IplImage* img, bool copyData=false);
默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头。当将参数copyData设为true后,就会复制整个图像数据。
例:
IplImage*iplImg = cvLoadImage("greatwave.jpg", 1);
Mat mtx(iplImg); // IplImage* ->Mat 共享数据
// or : Mat mtx = iplImg;
方法二:
IplImage * ipl = …;
cv::Mat m = cv::cvarrToMat(ipl); // default additional arguments: don’t copy data.
(2)将Mat类型转换到IplImage类型
同样只是创建图像头,而没有复制数据。
例:
Mat img=imread(1.jpg);
qImg = IplImage(img); // Mat -> IplImage
(3)将Mat类型转换到IplImage类型
Mat img=imread(1.jpg);
IplImage* qImg;
qImg = &IplImage(img);
(4)将CvMat类型转换为Mat类型
与IplImage的转换类似,可以选择是否复制数据。
Mat::Mat(const CvMat* m, bool copyData=false);
(5)将Mat类型转换为CvMat类型
与IplImage的转换类似,不复制数据,只创建矩阵头。
本文介绍了使用OpenCV进行图像处理时,不同图像格式之间的转换方法。主要包括IplImage与Mat、CvMat与Mat之间的相互转换,并提供了具体的示例代码。
629

被折叠的 条评论
为什么被折叠?



