iplimage*、mat 、CvMat相互转换

使用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)