cvsaveimage 异常_C++ IplImage*的若干bug之三:cvSaveImage問題

源代碼:

//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*。

問題解決。。。

雖然問題解決了,但我的內心依舊是凌亂而悲痛的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值