OpenCV 4.12.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。之后,每当您运行检测器时,它会向您显示多个图像,每个图像对应于管道的一部分。您可能还会看到一些重复,例如首先您会看到 阈值输出 ,然后是更多图像,然后又是 阈值输出 ,对应于同一图像,但与前一个图像略有不同,这是因为在内部图像被阈值化多次,使用不同的参数来调整色卡的可能大小。