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相关推荐

  1. OpenCV辅助对象(help objects)(5)_DataType

    cv::DataType<>为OpenCV中用于提取数据类型的模板,主要是利用C++ traits技术,实现算法与数据类型 的分离,增加算法兼容性,<learning OpenCV3 ...

  2. OpenCV辅助对象(help objects)(3)——Ptr

    OpenCV中的Ptr(智能指针)经过多次版本修改之后,在OpenCV4.0版本之后编译器需要指出C++11的编译器才能编译.Ptr类也完全进行了修改,将Ptr修改为了使用C++11中的shared_ ...

  3. OpenCV辅助对象(help objects)(6)_InputArray和OutputArray

    opencv中的cv:DataType<>解决了算法与数据类型分类的问题,使算法能够适应多种类型的数据,以及能够方便提取出数据类型.但是OpenCV的基本数据类型有多多,Mat matx, ...

  4. OpenCV辅助对象(help objects)(2)_Range

    Range在opencv中经常被用来表示一段连续的整数数字序列,整体数据结构比较简单,有两个元素start 和 end,分别为序列的开始和结束,取值范围为一个半开半闭空间: [start, end), ...

  5. OpenCV辅助对象(help objects)(1)_TermCriteria

    OpenCV除了基本数据结构(Basic data types)之外还有很多的辅助结构才能使opencv使用越来越完善,下面来分析第一个辅助结构TermCriteria,该结构是OpenCV3中经过整 ...

  6. OpenCV的数据类型——辅助对象

    在上一篇文章中,主要介绍了OpenCV的基础数据类型.接下来在本篇文章中将主要对OpenCV的辅助对象进行介绍. cv::TermCriteria类 在很多算法中都存在着循环嵌套,只有满足终止条件时才 ...

  7. OpenCV 实时对象跟踪(质心跟踪)

    本文章先介绍对象跟踪过程,考虑对象跟踪的特点决定使用:质心跟踪算法,然后会一步一步说明质心跟踪算法的实现:最后是如何用python代码实现. 实验效果如下: 对象跟踪过程 进行一组初始的对象检测(如: ...

  8. OpenCV运行对象检测深度学习网络的实例(附完整代码)

    OpenCV运行对象检测深度学习网络的实例 OpenCV运行对象检测深度学习网络的实例 OpenCV运行对象检测深度学习网络的实例 #include <fstream> #include ...

  9. OpenCV收集对象及其分割蒙版的数据集的实例(附完整代码)

    OpenCV收集对象及其分割蒙版的数据集的实例 OpenCV收集对象及其分割蒙版的数据集的实例 OpenCV收集对象及其分割蒙版的数据集的实例 #include "opencv2/core. ...

最新文章

  1. 安装完Hadoop之后,命令行输入hadoop或hdfs却找不到命令的解决方法
  2. VULKAN学习笔记-inter教学四篇
  3. react 手指移开_代码简介:React的五个死亡手指
  4. paylinks.php_毕业设计-基于PHP的网上购物网站系统设计
  5. linux内核 块驱动程序,linux – 为什么内核使用默认的块驱动程序而不是我的驱动程序代码?...
  6. 高清接口芯片---gv7600、sii9135
  7. 大数据行业到底有多少种工作岗位,各自的技能需求是什么?
  8. java编程的逻辑 京东,从阿里,京东等大厂面试题中提炼出25道最频繁出现的并发编程难题(附答案)...
  9. 打包java项目_Java项目常见打包方式
  10. TwinCAT 3 轴程序
  11. 小郡肝火锅点餐系统——测试部署发布
  12. Cisco Packet Tracer 思科交换机模拟器常见命令
  13. 高考加油的c语言程序,2020祝高三高考加油的句子 高考加油一句话
  14. 人工智能前景怎么样 用哪个开发语言比较好
  15. 2022留学生落户上海怎么办理社区公共户?
  16. 2021-12-06 迈向程序猿的第四十三步
  17. 完整的C语言开发过程
  18. DFT之LOC和LOS
  19. 网页全屏截图、在线截图API
  20. 关于货币兑换的循环语句和函数调用

热门文章

  1. 在Maven+Spring项目中使用Node.js的Gulp进行前端自动化构建
  2. navicat工具把SQL Server数据库转换MySQL数据库
  3. Lukas-Kanade光流法
  4. 微信小程序云开发之云函数创建
  5. 作业四 | 个人项目-小学四则运算 “软件”之初版
  6. 5分钟掌握var,let和const异同
  7. 三天100元从零开始搭建Hadoop集群
  8. 【Web API系列教程】3.3 — 实战:处理数据(建立数据库)
  9. 换一种方式“写代码 编程序“,为自己的程序生涯找条新路
  10. 第一次执行时没有问题,重复执行会出错、GP循环