Imatest IT 异常层次结构

从Imatest IT 4.2 版本开始,引入了异常层级结构,旨在为 API 用户提供更完善的错误处理方法。本页面旨在作为Imatest 可能抛出的异常及其在Imatest IT/DLL中处理方式的参考。

异常层次结构

下表显示了为 Imatest 定义的异常层次结构。表中,缩进越深表示该异常继承自其上方缩进越浅的异常。请注意, Imatest IT库也可能抛出由底层 MATLAB 例程生成的异常。Imatest IT提供了区分Imatest 异常和 MATLAB 异常所需的功能。

我们的库抛出的所有异常都是mwException类的实例,mwException 是一个 MATLAB 类,它继承自std::exception 。

异常名称

笔记

ImatestException

Imatest 所有异常的基类。

配置异常

处理与 Imatest 无效配置相关的错误的例外情况,例如提供的 INI 文件包含无效条目。

数据异常

这是针对 Imatest 数据对象出现问题而要抛出的异常。

数据构造异常

这是当 Imatest 数据对象的构造函数出现问题时要抛出的异常。

图像分析异常

但因用户提供的图片来源问题导致的错误除外。

自动检测异常

与自动检测算法相关的错误除外。

作物异常

因图像裁剪不当造成的一般性错误除外。

检测异常

此例外情况适用于 Imatest 特征检测算法中发生的错误。

RoiFailureException

如果 ROI 出现问题,例如检测到的边缘太靠近 ROI 的两端,则会出现错误,但这种情况除外。

ImageSourceException

但因用户提供的图片来源问题导致的错误除外。

错误框架异常

但也有例外情况,例如图像中的测试图表没有与相机正确对齐,或者换句话说,没有正确构图。

图像采集异常

图像采集接口(例如 Android 或 Omnivision API 函数)引起的错误例外情况。

图像异常

图像文件(而非视频文件)特有的错误除外。

BadImageSizeException

但当图像尺寸太小而无法进行分析时,则不适用此例外情况。

EmptyImageException

但也有例外情况,即本应有一个图像数组可供分析,但却检测到了一个空的图像数组。

不支持的格式异常

当提供不支持的图像或视频格式时,会出现例外情况。

视频异常

视频文件相关的常见错误除外。

ImatestIOException

I/O 一般问题的例外情况。

ImatestCannotOpenFileException

当 Imatest 无法打开文件时,即由于除找不到文件之外的其他原因而无法获得读取或写入权限时,则会出现例外情况。

ImatestFileNotFoundException

当找不到指定文件时,会抛出一个异常。

ImatestSocketException

套接字通信出错时抛出的异常。

LicenseException

与调用第三方许可库或系统相关的外部错误除外,例如,调用 Nalpeiron 库返回错误代码。

输出异常

但对于提供给用户的输出相关的错误,例如图表或文本输出中的错误,则不予受理。

JsonException

读取或写入 JSON 文件时出错的异常。

绘图异常

Imatest 向用户输出的图表中出现错误时,会进行例外处理。

XmlException

读取或写入 XML 文件时出错的异常。

参数异常

函数参数相关错误除外。

输入错误异常

当向函数提供的输入数量不正确时,会抛出异常。

输出数量错误异常

当传递给函数的输出数量不正确时,会抛出异常。

输入格式异常

例外情况是输入参数格式不正确(长度错误等)导致的错误。

输入类型错误异常

输入参数类型或类错误导致的错误除外。

UIException

用户界面相关的常规错误除外。

用户取消异常

当用户点击取消按钮时可能抛出的异常。

函数原型和其他库资源

由于mwException类没有用于指示异常的成员, Imatest IT库中包含了一个函数,用于检索上次抛出的异常的标识符。getExceptionID() 函数应该在 catch 代码块中调用(参见下面的示例)。

getExceptionID (int nargout , mwArray& errID, mwArray& errName )调用此函数以检索最后一个异常的标识符和名称。

errID参数是一个 mwArray 类型,它是 MATLAB 数组类,包含一个有符号整数,用于标识异常。errName 包含一个字符串,表示异常的名称。输入参数nargout 的值应为 2。

Imatest IT库中包含一个额外的头文件( imatest_exception_IDs.h ),其中包含Imatest异常层次结构的枚举和 const char* 标识符声明。imatest_exception_IDs.h 中定义的值与getExceptionID ()返回的值相对应。

例如:如何确定异常类型

为了区分 Imatest 异常和 Matlab 异常,您需要使用`getExceptionID` 函数获取异常标识符。Imatest 异常的完整标识符列表定义在Imatest IT附带的`imatest_exception_IDs.h`头文件中。以下示例展示了如何获取异常标识符:

try {

   // call an Imatest library function ...

} catch(mwException& mwe) {
   std::cout << "Error!" << std::endl;
   std::cout << mwe.what() << std::endl;
   mwe.print_stack_trace(); // print the stack trace to std::cerr

   mwArray errName, errID; 
   getExceptionID(2, errID, errName); 
   std::string exceptName((const char*)errName.ToString());
   int exceptID = errID.Get(1,1);
   // Handle exceptions using definitions in imatest_exception_IDs.h...

} catch(const std::exception& ex) {
   // Handle exceptions ...
}

相关 INI 文件设置

Imatest INI 文件的[api]部分新增了continue_on_error键。continue_on_error 可用于抑制在Imatest IT中批量处理图像时可能出现的异常。当 continue_on_error设置为 1 时,将抑制异常;当设置为 0 时,允许抛出异常。更多信息请参阅:影响 Imatest IT 的参数。