在OpenCV中进行边缘检测后找到最佳感兴趣区域

loc*_*cto 10 c++ opencv image-processing computer-vision edge-detection

我想将OCR应用于墙上7段显示的一些图片.我的策略如下:

  1. 隐藏Img到灰度
  2. 模糊img以减少假边缘
  3. 将img阈值化为二进制img
  4. 应用Canny Edge检测
  5. 根据数字轮廓给出的模式设置感兴趣区域(ROI)
  6. 缩放ROI和模板匹配该区域

如何设置ROI以便我的程序不必在整个图像中查找模板?我想根据找到的边数设置我的投资回报率,或者如果有人可以帮助我,那么更有用的东西.

我正在研究Cascade Classification和Haar,但我不知道如何将它应用到我的问题中.

这是经过预处理和边缘检测后的图像: 预处理和边缘检测后的图像

原始图像

在此输入图像描述

dab*_*aid 3

如果这代表了您必须处理的边缘数量,您可以尝试一个很好的简单策略,例如在二进制图像上滑动 ROI 查找器窗口,该窗口仅对像素值求和,并且除非该值是,否则不会触发高于阈值。这应该优化所有空白表面。

编辑:好的,一些不那么幼稚的方法。如果您有一些先验知识,例如您知道照片对齐良好(并且没有严重旋转或倾斜),您可以使用低-高-低高光栅进行一些传递,调整以捕获照片两侧的边缘段,在 x 和 y 维度上使用不同的比例。在两个方向上的良好命中不仅会提供有关 ROI 的线索,还会提供有关起始模板尺寸的线索(太大和太小的格栅不会同时击中两个边缘)。

您可以进行斑点检测,然后依次将模板应用于斑点(如果模板匹配分数低于阈值,则退回到合并斑点,以防您的号码段被意外分区)。斑点的大小可能会再次给您一些关于要应用的模板的比例的提示。