Mat和IplImage转换

Mat 是OpenCV和C++的接口矩阵类,ImlImage是OpenCV和C语言的接口的结构体,但是C++程序有时候时候还是要用到ImlImage。

浅拷贝是不需要释放内存的。

深拷贝才需要释放内存。

IplImage 转 Mat

浅拷贝

直接使用cvarrToMat函数:

1
2
3
IplImage* src = cvLoadImage("./res/tmp.jpg");  
Mat img;
img = cvarrToMat(src);

深拷贝

需要在Mat里创建一个新的Mat对象,然后进行数据的复制,再用上述的函数进行数据头的复制(即浅拷贝)。

1
2
3
4
IplImage* src = cvLoadImage("c://tmp.jpg");  
Mat img_tmp;
img_tmp = cvarrToMat(src);
Mat img = img_tmp.clone();

Mat 转 IplImage

浅拷贝

1
2
Mat img = imread(./res/tmp.jpg);
IplImage *src = &IplImage(img);

深拷贝(即再复制一次数据)

1
2
3
Mat img = imread(./res/tmp.jpg);
IplImage *src_tmp = &IplImage(img);
IplImage *src = cvCloneImage(src_tmp);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!