OpenCV异常处理机制
2016-02-25 14:51
351 查看
原文:/article/11106414.html
很多函数,都会对参数的有效性进行判断,不符合要求,直接弹对话框,然后程序崩溃,逼得你不得不正确调用他。这个属于编程的逻辑错误,就像assert一样,用于排除编码错误,这和业务错误处理的层次是不同的。
一般,我们仿照这种模式,如下
[cpp] view
plain copy
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,而且要交付使用,总不能让用户面对错误弹出窗口吧,这时候在程序的初始化部分,写入如下代码:
[cpp] view
plain copy
#ifdef _DEBUG
cvSetErrMode(CV_ErrModeLeaf);
#else
cvSetErrMode(CV_ErrModeSilent);
#endif
在release版本里面将gui报错禁用掉。这时候,如果内存越界、参数错误,程序异常退出,看门狗起作用。
这些机制,查看cxerror.h/cxerror.cpp就能明白了。
很多函数,都会对参数的有效性进行判断,不符合要求,直接弹对话框,然后程序崩溃,逼得你不得不正确调用他。这个属于编程的逻辑错误,就像assert一样,用于排除编码错误,这和业务错误处理的层次是不同的。
一般,我们仿照这种模式,如下
[cpp] view
plain copy
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,而且要交付使用,总不能让用户面对错误弹出窗口吧,这时候在程序的初始化部分,写入如下代码:
[cpp] view
plain copy
#ifdef _DEBUG
cvSetErrMode(CV_ErrModeLeaf);
#else
cvSetErrMode(CV_ErrModeSilent);
#endif
在release版本里面将gui报错禁用掉。这时候,如果内存越界、参数错误,程序异常退出,看门狗起作用。
这些机制,查看cxerror.h/cxerror.cpp就能明白了。
相关文章推荐
- 探索大型网站技术架构(二)
- VC、Linux、vxWorks读写物理扇区小结
- linux运维netstat命令学习
- Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
- 搞定linux运维年薪30万就是这么简单!
- 大型网站系统架构的演化
- OpenBlas-base引擎提升“R”计算性能
- 在linux内核文件中arch文件作用
- linux的whoami, who指令
- Nginx+Keepalived(带Nginx监控脚本)
- Nginx+Keepalived(带Nginx监控脚本)
- 自动化安装linux--cobbler
- nginx 操作
- 在centos 6.6 上搭建一个简单的php的开发环境
- SSH 远程登录Linux服务器很慢的解决方案
- linux常用基本命令之二十二implantisomd5和checkisomd5
- 初识AOP
- Hadoop技术博客
- Linux下 lsof 用法
- linux技术博客