原來是iplimage和mat之間轉化的時候,釋放記憶體問題。
先引入淺拷貝和深拷貝問題。
//iplimage—>mat
//example:
//淺拷貝:
iplimage* pbinary=cvloadimage("c:"
,0);
mat img;
img=cvarrtomat(pbinary);
//深拷貝只需要再在mat裡建立乙個新的mat物件,然後進行資料的複製,再用上述的函式進行資料頭的複製(淺拷貝):
iplimage* pbinary=cvloadimage("c:"
, 0);
mat imgtemp;
img=cvarrtomat(pbinary);
mat img = imgtemp.clone();
//mat—>iplimage
//example:
//淺拷貝:
//深拷貝只要再加一次複製資料:
iplimage *input = cvcloneimage(pbinary);
淺拷貝是不需要釋放記憶體的。這是我遇到的乙個bug,釋放我的是出現了報錯。
深拷貝才需要釋放記憶體。
//iplimage—>mat
iplimage* red_hsv = cvcreateimage(cvgetsize(car_light), 8, 3);
mat img3 = mat(red_hsv);
cvreleaseimage(&red_hsv);
//mat—>iplimage
size dsize = size(128, 64);
mat image2 = mat(dsize, cv_8u);
iplimage *image3 = &iplimage(image2);
這邊就是淺拷貝,不需要釋放iplimage
Mat和IplImage相互轉換
mat 是opencv 和c 的介面矩陣類,imlimage 是opencv和c 語言的介面的結構體,但是c 程式有時候時候還是要用到 imlimage,例如在mfc中的picture control顯示。下面總結了針對opencv3.0以上版本的mat和iplimage相互轉換方法 cpp vie...
Mat與IplImage互相轉換
mat 是opencv 和c 的介面矩陣類,imlimage 是opencv和c 語言的介面的結構體。下面介紹的mat和iplimage相互轉換方法 1 iplimage mat 淺拷貝 深拷貝 先進行資料頭的複製 淺拷貝 再在mat裡建立乙個新的mat物件,然後進行資料的複製。iplimage p...
Mat與IplImage之間的轉化
1 plimage轉mat 使用mat的建構函式 mat mat const iplimage img,bool copydata false 預設情況下copydata為false 注意 以下三種效果一致,均為淺拷貝 mat m srcimg mat m srcimg,false mat m sr...