OpenCV:忽略类似文本的轮廓

时间:2017-04-17 11:12:58

标签: c++ opencv opencv3.0

背景

我想检测包含2D几何形状的图像中的所有轮廓,但是去掉任何看起来像文本的东西。

示例输入: enter image description here

我尝试通过Tesseract检测文本区域,然后删除这些文本区域。对于一些OCR识别良好的图像,这种方法很好,因此可以很好地识别文本区域,然后可以删除识别文本的轮廓。但是对于大多数图像来说,文本识别得不好,因此我无法从图像中删除不相关的文本轮廓。

因此我的问题是:如何区分文字般的轮廓和2D“几何”轮廓?

2 个答案:

答案 0 :(得分:1)

如果您不关心文本并且只是想摆脱它,那么您可以通过将RETR_EXTERNAL作为模式参数传递给findCountours()函数来检测外部轮廓。这将为您提供最外面的轮廓,并忽略几何形状内包含的任何内容。

或者,如果您想要更多控制,可以将mode参数作为RETR_TREE传递,然后遍历树,仅保留顶层轮廓并忽略层次结构中该级别以下的任何内容。通过这种方式,您可以获得所有内容,然后您可以决定要保留的内容以及您想要忽略的内容。

阅读OpenCV文档的this page,了解findCountours()如何表示层次结构的信息(该页面来自python教程,但它的通用性足以跟随)。

当然,只有在图像总是与您在问题中给出的示例相似时才会起作用 - 即文本总是在几何形状内部。如果你有形状之外的文字,那么也许你可以看一下轮廓的大小(边界矩形)并忽略任何低于某个阈值的东西(假设文本轮廓将比你的几何形状小得多)。

答案 1 :(得分:1)

属于文本的轮廓也代表根据您的示例的区域。因此,您可以尝试使用区域的属性来消除一些不需要的区域(文本轮廓!)我可以建议您可以使用一些属性,如偏心可靠性或< strong>紧凑性(您可以在此处找到代码示例:https://github.com/mribrahim/Blob-Detection  )

例如:使用紧凑度值可以区分常规形状和其他形状,或者您可以组合任何其他属性