随笔-145  评论-173  文章-70  trackbacks-0
在调试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 阅读(710) 评论(0)  编辑 收藏 引用 所属分类: OpenCV / OpenGL

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理