OpenCV异常处理机制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OpenCV异常处理机制

OpenCV异常处理机制分类:

openCV

2010-12-14 21:49

187人阅读

评论(1)

收藏

举报

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

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

view plainprint?int TestCvError( IplImage *pImgGray, int iNum)

{ CV_FUNCNAME( "TestCvError" );

__BEGIN__; if (iNum <= 1 )

CV_ERROR(CV_StsOutOfRange, "参数iNum必须大于1"); if( !pImgGray ) CV_ERROR( CV_StsNullPtr, "Null pointer to pImgGray" );

if( pImgGray->depth != IPL_DEPTH_8U && pImgGray->nChannels != 1 )

CV_ERROR( CV_StsUnsupportedFormat, "Only 8-bit grayscale images are supported" ); //函数主要实现部分__END__; return 0; } int TestCvError( IplImage *pImgGray, int iNum)

{

CV_FUNCNAME( "TestCvError" );

__BEGIN__;

if (iNum <= 1 )

CV_ERROR(CV_StsOutOfRange, "参数iNum必须大于1");

if( !pImgGray )

CV_ERROR( CV_StsNullPtr, "Null pointer to pImgGray" );

if( pImgGray->depth != IPL_DEPTH_8U && pImgGray->nChannels != 1 )

CV_ERROR( CV_StsUnsupportedFormat, "Only

8-bit grayscale images are supported" );

//函数主要实现部分

__END__;

return 0;

}

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

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

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

view plainprint?#ifdef _DEBUG

cvSetErrMode(CV_ErrModeLeaf); #else

cvSetErrMode(CV_ErrModeSilent); #endif #ifdef _DEBUG cvSetErrMode(CV_ErrModeLeaf);

#else

cvSetErrMode(CV_ErrModeSilent);

#endif

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

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

相关文档
最新文档