OpenCV辅助对象(help objects)(4)_Exception
OpenCV源码中一般程序如果遇到一些异常(比如空指针等之类的)需要跑出异常一般使用Exception类。Exception是OpenCV在C++std::exception异常中进行了再次封装。
Exception类
Exception类定义如下:
比较重要的几个参数:
int code:opencv 错误码,用于标明是哪类错误。
String err:错误提示信息
String func:发生异常的函数
String file:发生异常的文件
int line:发生异常代码所处的行数
formatMessage():将错误信息按照固定格式进行输出。
OpenCV错误码
OpenCV支持的错误码如下:
enum Code {StsOk= 0, //!< everything is okStsBackTrace= -1, //!< pseudo error for back traceStsError= -2, //!< unknown /unspecified errorStsInternal= -3, //!< internal error (bad state)StsNoMem= -4, //!< insufficient memoryStsBadArg= -5, //!< function arg/param is badStsBadFunc= -6, //!< unsupported functionStsNoConv= -7, //!< iteration didn't convergeStsAutoTrace= -8, //!< tracingHeaderIsNull= -9, //!< image header is NULLBadImageSize= -10, //!< image size is invalidBadOffset= -11, //!< offset is invalidBadDataPtr= -12, //!<BadStep= -13, //!< image step is wrong, this may happen for a non-continuous matrix.BadModelOrChSeq= -14, //!<BadNumChannels= -15, //!< bad number of channels, for example, some functions accept only single channel matrices.BadNumChannel1U= -16, //!<BadDepth= -17, //!< input image depth is not supported by the functionBadAlphaChannel= -18, //!<BadOrder= -19, //!< number of dimensions is out of rangeBadOrigin= -20, //!< incorrect input originBadAlign= -21, //!< incorrect input alignBadCallBack= -22, //!<BadTileSize= -23, //!<BadCOI= -24, //!< input COI is not supportedBadROISize= -25, //!< incorrect input roiMaskIsTiled= -26, //!<StsNullPtr= -27, //!< null pointerStsVecLengthErr= -28, //!< incorrect vector lengthStsFilterStructContentErr= -29, //!< incorrect filter structure contentStsKernelStructContentErr= -30, //!< incorrect transform kernel contentStsFilterOffsetErr= -31, //!< incorrect filter offset valueStsBadSize= -201, //!< the input/output structure size is incorrectStsDivByZero= -202, //!< division by zeroStsInplaceNotSupported= -203, //!< in-place operation is not supportedStsObjectNotFound= -204, //!< request can't be completedStsUnmatchedFormats= -205, //!< formats of input/output arrays differStsBadFlag= -206, //!< flag is wrong or not supportedStsBadPoint= -207, //!< bad CvPointStsBadMask= -208, //!< bad format of mask (neither 8uC1 nor 8sC1)StsUnmatchedSizes= -209, //!< sizes of input/output structures do not matchStsUnsupportedFormat= -210, //!< the data format/type is not supported by the functionStsOutOfRange= -211, //!< some of parameters are out of rangeStsParseError= -212, //!< invalid syntax/structure of the parsed fileStsNotImplemented= -213, //!< the requested function/feature is not implementedStsBadMemBlock= -214, //!< an allocated block has been corruptedStsAssert= -215, //!< assertion failedGpuNotSupported= -216, //!< no CUDA supportGpuApiCallError= -217, //!< GPU API call errorOpenGlNotSupported= -218, //!< no OpenGL supportOpenGlApiCallError= -219, //!< OpenGL API call errorOpenCLApiCallError= -220, //!< OpenCL API call errorOpenCLDoubleNotSupported= -221,OpenCLInitError= -222, //!< OpenCL initialization errorOpenCLNoAMDBlasFft= -223
};
Exception类是继承的C++ std::exception,其使用方法一样
(1) throw:检测到程序出现异常,无法处理时使用throw抛出异常,throw 后面一般加cv::Exception,用于指定抛出异常的错误码,以及一些基本信息,抛出异常后当前函数会终止,并把控制权交给能处理该异常的代码
throw cv::Exception(cv::Error::XXX, string, CV_Func, __FILE__, __LINE__)
(2) try: 抓取异常,一般开发人员在使用一些API时需要使用try来抓取其中的异常。try语句块以关键字try开始,并以一个或多个catch子句(catch case)结束,其处理方法一般为:
try
{
... ...
处理程序
...
} catch (const cv::Exception& e)
{
异常处理
}
Exception类一般在使用OpenCV中会遇到其内部抛出各种异常,用以提示开发人员所遇到的错误,实际开发中只需要根据返回的提示信息查看相关错误码即可。
Assert
OpenCV源代码中除了 Exception来指示内部程序遇到问题时中断程序,还有另外一个手段就是Assert。Assert的使用场景经常用来检查参数入参,以及一些其他内部参数检查,如果不是程序所需要的,则抛出Assert终止程序。
在使用OpenCV中经常遇到在使用Mat channels不对等等这类错误,就是用的Assert进行判断。
CV_ERROR
CV_ERROR是OpenCV旧的版本中经常使用的终止程序的方法,其内部实质上就是调用的cv::Exception。OpenCv源代码中在traincascade中的代码中还有少量使用。
OpenCV辅助对象(help objects)(4)_Exception相关推荐
- OpenCV辅助对象(help objects)(5)_DataType
cv::DataType<>为OpenCV中用于提取数据类型的模板,主要是利用C++ traits技术,实现算法与数据类型 的分离,增加算法兼容性,<learning OpenCV3 ...
- OpenCV辅助对象(help objects)(3)——Ptr
OpenCV中的Ptr(智能指针)经过多次版本修改之后,在OpenCV4.0版本之后编译器需要指出C++11的编译器才能编译.Ptr类也完全进行了修改,将Ptr修改为了使用C++11中的shared_ ...
- OpenCV辅助对象(help objects)(6)_InputArray和OutputArray
opencv中的cv:DataType<>解决了算法与数据类型分类的问题,使算法能够适应多种类型的数据,以及能够方便提取出数据类型.但是OpenCV的基本数据类型有多多,Mat matx, ...
- OpenCV辅助对象(help objects)(2)_Range
Range在opencv中经常被用来表示一段连续的整数数字序列,整体数据结构比较简单,有两个元素start 和 end,分别为序列的开始和结束,取值范围为一个半开半闭空间: [start, end), ...
- OpenCV辅助对象(help objects)(1)_TermCriteria
OpenCV除了基本数据结构(Basic data types)之外还有很多的辅助结构才能使opencv使用越来越完善,下面来分析第一个辅助结构TermCriteria,该结构是OpenCV3中经过整 ...
- OpenCV的数据类型——辅助对象
在上一篇文章中,主要介绍了OpenCV的基础数据类型.接下来在本篇文章中将主要对OpenCV的辅助对象进行介绍. cv::TermCriteria类 在很多算法中都存在着循环嵌套,只有满足终止条件时才 ...
- OpenCV 实时对象跟踪(质心跟踪)
本文章先介绍对象跟踪过程,考虑对象跟踪的特点决定使用:质心跟踪算法,然后会一步一步说明质心跟踪算法的实现:最后是如何用python代码实现. 实验效果如下: 对象跟踪过程 进行一组初始的对象检测(如: ...
- OpenCV运行对象检测深度学习网络的实例(附完整代码)
OpenCV运行对象检测深度学习网络的实例 OpenCV运行对象检测深度学习网络的实例 OpenCV运行对象检测深度学习网络的实例 #include <fstream> #include ...
- OpenCV收集对象及其分割蒙版的数据集的实例(附完整代码)
OpenCV收集对象及其分割蒙版的数据集的实例 OpenCV收集对象及其分割蒙版的数据集的实例 OpenCV收集对象及其分割蒙版的数据集的实例 #include "opencv2/core. ...
最新文章
- 安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法
- VULKAN学习笔记-inter教学四篇
- react 手指移开_代码简介:React的五个死亡手指
- paylinks.php_毕业设计-基于PHP的网上购物网站系统设计
- linux内核 块驱动程序,linux – 为什么内核使用默认的块驱动程序而不是我的驱动程序代码?...
- 高清接口芯片---gv7600、sii9135
- 大数据行业到底有多少种工作岗位,各自的技能需求是什么?
- java编程的逻辑 京东,从阿里,京东等大厂面试题中提炼出25道最频繁出现的并发编程难题(附答案)...
- 打包java项目_Java项目常见打包方式
- TwinCAT 3 轴程序
- 小郡肝火锅点餐系统——测试部署发布
- Cisco Packet Tracer 思科交换机模拟器常见命令
- 高考加油的c语言程序,2020祝高三高考加油的句子 高考加油一句话
- 人工智能前景怎么样 用哪个开发语言比较好
- 2022留学生落户上海怎么办理社区公共户?
- 2021-12-06 迈向程序猿的第四十三步
- 完整的C语言开发过程
- DFT之LOC和LOS
- 网页全屏截图、在线截图API
- 关于货币兑换的循环语句和函数调用
热门文章
- 在Maven+Spring项目中使用Node.js的Gulp进行前端自动化构建
- navicat工具把SQL Server数据库转换MySQL数据库
- Lukas-Kanade光流法
- 微信小程序云开发之云函数创建
- 作业四 | 个人项目-小学四则运算 “软件”之初版
- 5分钟掌握var,let和const异同
- 三天100元从零开始搭建Hadoop集群
- 【Web API系列教程】3.3 — 实战:处理数据(建立数据库)
- 换一种方式“写代码 编程序“,为自己的程序生涯找条新路
- 第一次执行时没有问题,重复执行会出错、GP循环