《OpenCV异常处理机制》由会员分享,可在线阅读,更多相关《OpenCV异常处理机制(4页珍藏版)》请在金锄头文库上搜索。
1、OpenCV 特别处理机制OpenCV 特别处理机制分类:openCV2021-12-14 21:49187 人阅读评论(1)保藏举报很多函数,都会对参数的有效性进展推断,不符合要求,直 接弹对话框,然后程序崩溃,逼得你不得不正确调用他。这 个属于编程的规律错误,就像 assert 一样,用于排解编码错误,这和业务错误处理的层次是不同的。一般,我们仿照这种模式,如下view plainprint?int TestCvError( IplImage *pImgGray, int iNum)CV_FUNCNAME( “TestCvError“ ); BEGIN;if (iNum <= 1 )
2、 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;in
3、tTestCvError( 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(
4、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 _DEBUGcvSetErrMode(CV_ErrModeLeaf);#elsecvSetErrMode(CV_ErrModeSilent);#endif#ifdef _DEBUGcvSetErrMode(CV_ErrModeLeaf); #elsecvSetErrMode(CV_ErrModeSilent); #endif在release 版本里面将 gui 报错禁用掉。这时候,假设内存越界、参数错误,程序特别退出,看门狗起作用。这些机制,查看 cxerror.h/cxerror.cpp 就能明白了。