OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
未找到匹配项
自定义和调试检测系统

色卡检测涉及许多超参数。默认值的选择旨在最大化平均情况下的检测结果。但这些值可能并不适合您的用例。可以配置这些值以提高特定用例的准确性。为此,您需要创建一个 `DetectorParameters` 的实例。

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

它包含许多值,完整的列表可以在 `DetectorParameters` 的文档中找到。在本教程中,我们将调整 `maxError` 的值。其他值也可以类似地进行配置。

maxError 控制检测中允许的误差大小。例如,如果某个色卡单元被遮挡,它会增加误差。默认值允许一定程度的遮挡容差,增加(或减少)maxError 将增加(或减少)此容差。

您可以像这样简单地更改其值。

params->maxError = 0.5;

要在检测系统中使用它,您需要将其传递给 process 函数。

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。此后,每当您运行检测器时,它都会显示多个图像,每个图像对应于管道的一部分。您还可能会看到一些重复,例如,您首先会看到 `阈值输出`,然后是一些图像,然后再次是 `阈值输出`,对应于同一图像,但与之前的略有不同,这是因为内部图像会使用不同的参数多次进行阈值处理,以适应不同可能的色卡大小。