opencv mat与cvmat, iplimage转换

历史版本的opencv中使用cvmat储存数据,使用iplimage存储图像,是基于C的数据存储结构

之后的opencv2.x出现mat类型,不用手动管理内存,相比cvmat和iplimage更加方便,这里主要介绍mat和其二者的转换关系

cvmat 和 iplimage派生于同一个基类cvarr,所以其二者到mat有相同的转换方式

iplimage->mat

IplImage* frame = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
//浅拷贝
cv::Mat m = cv::cvarrToMat(frame)
//深拷贝 copydata设置为true
cv::Mat m = cv::cvarrToMat(frame, true);

或直接用构造函数

IplImage* src = cvLoadImage("xx.jpg");
//浅拷贝
Mat M(src);
Mat M(src, false);
Mat M = src;
//深拷贝
Mat M(src, true);

cvmat->mat

CvMat* frame = cvCreateMat(3, 3, CV_32FC1);
//浅拷贝
cv::Mat m = cv::cvarrToMat(frame)
//深拷贝 copydata设置为true
cv::Mat m = cv::cvarrToMat(frame, true);

反过来,由mat到iplimage和cvmat的转换

mat->iplimage

Mat src = imread("x.jpg");
IplImage* m = &IplImage(src);
//深拷贝使用clone复制数据  
IplImage *m = cvCloneImage(m);

mat->cvmat

opencv 2.x 可以直接赋值使用

Mat src = ...;
CvMat dst = img;

而在更高版本3.x 使用cvmat的构造函数即可

Mat src = ...;
CvMat dst(img);

你可能感兴趣的:(opencv,计算机视觉,c++)