1)Mat转为IplImage和CvMat格式
可以用简单的等号赋值操作来进行类型转换:
Mat img(Size(320,240),CV_8UC3);
IplImage iplimg = img; //转为IplImage结构
或者用new方法获取指针:
Mat mat_img(Size(320,240),CV_8UC3);
IplImage* iplimg = new IplImage(mat_img);
如果要转为CvMat类型,操作类似:
CvMat cvimg = img;
注意:类型转换后,IplImage和CvMat与Mat共用同一矩阵数据,而IplImage和CvMat没有引用计数功能,如果上述中的img数据被释放,iplimg和cvimg也就失去了数据,因此要牢记不可将Mat对象提前释放。
如果想完全复制数据:
Mat Img = imread("1.jpg");
IplImage ipl_image = Img;
//深拷贝只要再加一次复制数据:
IplImage *input = cvCloneImage(&ipl_image);
2)IplImage和CvMat转为Mat格式
IplImage* iplimg = cvLoadImage("lena.jpg");
Mat mat_image_=cv::cvarrToMat(iplimg,true);//第二个参数表示是否复制