在调试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 阅读(707)
评论(0) 编辑 收藏 引用 所属分类:
OpenCV / OpenGL