Mat 是OpenCV和C++的接口矩阵类,ImlImage是OpenCV和C语言的接口的结构体,但是C++程序有时候时候还是要用到ImlImage。
浅拷贝是不需要释放内存的。
深拷贝才需要释放内存。
IplImage 转 Mat
浅拷贝
直接使用cvarrToMat函数:
| 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);
|