在調試OpenCV的過程中,由于原來的文件太大,所以需要選擇一個方法來縮小,用到了resize函數,可是最終的結果卻是,僅僅多加了一個if判斷,就出現了問題,顯示
PyrDown函數的參數個數不對,這樣的話,程序都無法正確運行。
可是僅僅改了一句代碼啊,為什么出現了這樣一個問題呢?
看看下面改變的部分代碼:
static void make_pic(CString infilename,CString outfilename)
{
IplImage *image = cvLoadImage(infilename,3);
if ((image->height > 1000) && (image->width > 2000))
{
IplImage *newimgtmp = cvCreateImage(cvSize(image->width/2,image->height/2),image->depth,image->nChannels);
cvResize(image,newimgtmp,CV_INTER_LINEAR);
// image = newimgtmp; cvReleaseImage(&newimgtmp);
}
if (image == NULL)
{
MessageBox(NULL,"讀取圖片失敗","失敗",MB_OK);
readpicSucess = false;
return ;
}
const char *cascade_name = "data/haarcascades/haarcascade_frontalface_alt2.xml";
CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name);
if (cascade == NULL)
{
::MessageBox(NULL,"沒有data文件夾,讀取分離器失敗","失敗",MB_OK);
readSucess = false;
return ;
}
else
{
detect_and_draw_objects(image,cascade,1,infilename,outfilename);
cvReleaseHaarClassifierCascade(&cascade);
cvReleaseImage(&image);
}
}
在圖示的紅色部分,增加了一個賦值語句,就是說賦值的話將這個尺寸給img,可是實際上,根本沒有必要,因為resize本來已經做好了這個工作,而通過查書,終于發現了,然后注釋掉該句,OK,完全沒有任何問題!
體會是:
首先要確定代碼的范圍,因為只改正了那一部分,而且注釋后沒有問題,所以就是這個部分的問題,然后逐句的來找錯誤。需要注意的是是否合法,就像這個賦值,就是可行而不合法的操作,根本沒有見過兩個直接的這個賦值,iplimag的類型可以直接賦值嗎?顯然沒有,所以就可以得到這個結論。
調試,是程序的必須,而面對困難的時候,多走一步,未來就會少走一步!
posted on 2009-12-26 19:17
deercoder 閱讀(717)
評論(0) 編輯 收藏 引用 所屬分類:
OpenCV / OpenGL