源代碼:
//crop image
IplImage *imgTemp = imgcrop(rect, img); //從原圖img中裁剪出rect區域的圖像patch,該方法編譯運行均無誤
if(!imgTemp){
LOOGE<
cvReleaseImage(&imgTemp);imgTemp = 0;//如果裁剪出錯,釋放imgTemp
return -1;
}
//resize image
IplImage* newImg = imageResize(imgTemp, sideControl); //將imgTemp最長邊控制為sideControl進行resize,保存為newImg
if(!newImg){
LOOGE<
cvReleaseImage(&imgTemp);imgTemp = 0;//如果resize出錯,釋放imgTemp和newImg,繼續下一次循環
cvReleaseImage(&newImg);newImg = 0;
return -1;
}
//save image crops
cvSaveImage( “newImg.jpg”, newImg );//保存newImg,此處為上述做裁剪及resize的最終目的!!!
//release
cvReleaseImage(&imgTemp);imgTemp = 0;
cvReleaseImage(&newImg);newImg = 0;
bug分析:
(1)如果imageResize時出錯,那么會釋放掉imgTemp和newImg兩個變量,且程序退出運行;
(2)否則,程序正常進行,在接下來進行的釋放中,第一條cvReleaseImage中的imgTemp可以正常釋放,而第二條中釋放newImg運行時出錯;
(3)將兩條cvReleaseImage調換了順序,先釋放newImg正常,后釋放imgTemp時運行出錯;
(4)將
cvReleaseImage(&imgTemp);imgTemp = 0;
放到了
cvSaveImage("newImg.jpg", newImg);前面后,編譯通過,但運行至cvSaveImage處,出現錯誤信息如下:
OpenCV Error: Bad argument (Unknown array type) in cvarrToMat, file /home/tangyuan/programs/opencv-2.4.11/modules/core/src/matrix.cpp, line 698
terminate called after throwing an instance of 'cv::Exception'
what(): /home/tangyuan/programs/opencv-2.4.11/modules/core/src/matrix.cpp:698: error: (-5) Unknown array type in function cvarrToMat
此時查看了cvSaveImage的返回值為1;
(5)實在是心累,判定應該是imageResize返回IplImage*時出的問題,為了將最終resize后的圖像保存下來,遂將cvSaveImage直接寫在了imageResize方法里面進行圖像保存,imageResize的返回值設為int不再是IplImage*。
問題解決。。。
雖然問題解決了,但我的內心依舊是凌亂而悲痛的。。。