OpenCV  4.10.0
开源计算机视觉
加载中...
搜索中...
没有匹配项
定制和调试检测系统

有很多超参数与图表检测相关。默认值经过选择,以最大程度提升一般情况下的检测。但这些值可能不适用于您的用例。可对这些值进行配置以提高针对特定用例的准确性。为此,您需要创建 DetectorParameters 的一个实例。

mcc::Ptr<DetectorParameters> params = mcc::DetectorParameters::create();
  • mcc::很重要。

它包含很多值,完整列表可参见 DetectorParameters 的文档。在本教程中,我们将操作 maxError 的值。可对其他值进行类似的配置。

maxError 控制在检测中允许的错误程度。例如,如果图表中的某个单元格被遮挡,这将会增大错误。默认值允许某种程度的遮挡容忍度,增大(或减小)maxError 之后,将会增大(或减小)这种容忍度。

您可以像这样更改其值。

params->maxError = 0.5;

要在检测系统中使用此值,您需要将其传递到进程函数。

Ptr<CCheckerDetector> detector = CCheckerDetector::create();
detector->process(image, chartType, params = params);

这就是操作这些值的简单方法。但有一个陷阱,即检测管道的部件很多。如果您只是这样运行,将无法单独看到此更改的效果。前置部件可能没有检测到任何可能的色彩校验器候选对象,因此更改 maxError 的值不会产生任何效果。幸运的是,OpenCV 提供了一种对此问题的解决方案。您可以让代码输出多幅图像,每幅图像都显示管道中某个部件的效果。这在默认情况下是禁用的。

  • 只有在从源代码进行编译时才可以使用此功能。如果您无法从源代码进行构建,但仍需要此功能,请尝试在 OpenCV 存储库中提出一个问题。

方法:打开文件 opencv_contrib/modules/mcc/include/opencv2/mcc/checker_detector.hpp,在顶部附近有这样一行

// #define MCC_DEBUG

取消对此行注释并重建 OpenCV。此后,每当您运行检测器时,它都会显示多张图像,每张图像都对应管道的一部分。此外,您可能还会看到一些重复,比如首先您将看到“阈值输出”,然后一些更多图像,再次是对应同一图像的“阈值输出”,但与前一个略有不同,这是因为在内部,该图像进行多次阈值设置,具有不同的参数以针对色卡的不同可能尺寸进行调整。