分享

OpenCV异常处理机制

 昵称8245320 2011-12-15

很多函数,都会对参数的有效性进行判断,不符合要求,直接弹对话框,然后程序崩溃,逼得你不得不正确调用他。这个属于编程的逻辑错误,就像assert一样,用于排除编码错误,这和业务错误处理的层次是不同的。

 

        一般,我们仿照这种模式,如下

 

 

  1. int TestCvError( IplImage *pImgGray, int iNum)    
  2. {    
  3.      CV_FUNCNAME( "TestCvError" );      
  4.     __BEGIN__;    
  5.     if (iNum <= 1 )    
  6.         CV_ERROR(CV_StsOutOfRange, "参数iNum必须大于1");    
  7.     if( !pImgGray )    
  8.         CV_ERROR( CV_StsNullPtr, "Null pointer to pImgGray" );    
  9.     if( pImgGray->depth != IPL_DEPTH_8U && pImgGray->nChannels != 1 )    
  10.         CV_ERROR( CV_StsUnsupportedFormat, "Only 8-bit grayscale images are supported" );    
  11.      
  12.  //函数主要实现部分    
  13.     __END__;    
  14.     return 0;    
  15. }    
 

 

如果不想这么麻烦,直接用OPENCV_ASSERT是一样的。比如:

 

OPENCV_ASSERT(pImgGray != NULL, "TestCvError", "Null pointer to pImgGray");

 

问题是,有时候产品未必能够很好的测试,总有bug,而且要交付使用,总不能让用户面对错误弹出窗口吧,这时候在程序的初始化部分,写入如下代码:

  1. #ifdef _DEBUG  
  2.     cvSetErrMode(CV_ErrModeLeaf);  
  3. #else  
  4.     cvSetErrMode(CV_ErrModeSilent);  
  5. #endif  
 

在release版本里面将gui报错禁用掉。这时候,如果内存越界、参数错误,程序异常退出,看门狗起作用。

 

这些机制,查看cxerror.h/cxerror.cpp就能明白了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多