如何在OpenCV中从任意角度检测字母"E"

3

我是一个OpenCV初学者。我正在尝试使用 C++OpenCV中检测特定形状-字母“E”。

我已经考虑了多种方法来解决这个问题。模板匹配和OCR在任何角度上都不起作用,因此我考虑使用Canny边缘检测。在研究了这个问题之后,发现可以使用霍夫线变换或Canny边缘检测。

我能够实现以上两种方法,但接下来的步骤让我很困惑。请问有哪位能够提供一些关于如何从这里向前推进的指导吗?在应用了Canny滤波器之后,如何检查字母“E”是否存在?

下面是输入和输出图片,但它们可能处于任意角度。

输入:

input

输出:

output


最好上传原始图像和处理后的结果。 - lennon310
谢谢,我现在会上传它们。 - user3144325
一个想法是通过提取出的单应性来扭曲图像,以“消除角度”。可以查看“图像矫正”来实现此操作。之后,可以使用OCR和/或模板匹配。您将需要提取直线(例如从可能的字母中)并假设正确的角度,这样可以计算单应性。 - Micka
1个回答

2
根据需要检测的“可靠性”,您解决问题的可能方案的复杂程度可能会有很大差异。由于您没有在问题中提到鲁棒性,因此这可能不是一个问题。因此,一个相当简单的解决方案可能是:
  1. 使用{{link1:cv :: findContours()}}从二进制图像(Canny)中提取轮廓。
  2. 对于每个找到的轮廓,将轮廓点数与您期望的字母“E”的轮廓点数进行比较。
  3. 如果匹配,则检测到了“E”。

如果您需要更强的鲁棒性,可以:

  • 在轮廓的基础上添加后续检查,例如Hu矩
  • 进一步的预处理步骤,例如将候选对象的边界框旋转到某个标准方向。
  • 完全不同的东西,例如广义霍夫变换(如此处所示:图像处理:“可口可乐罐”识别算法改进)。
  • 我认为SIFT或SURF在这里行不通,因为该对象缺乏有趣的纹理模式。

非常感谢,健壮性在未来将是必要的,但我只是想先理解原始概念。感谢您的帮助,祝您新年快乐! - user3144325

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接