2017-04-17 116 views
0

背景OpenCV的:忽略文本般轮廓

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

示例输入: enter image description here

我试图经由超正方体来检测文本区域,并且随后删除这些文本区域。对于一些OCR识别良好的图像,这可以很好地工作,因此可以很好地识别文本区域,然后可以删除识别文本的轮廓。但是对于大多数图像来说,文本不能很好地识别,因此我无法从图像中删除不相关的文本轮廓。

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

回答

1

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

或者如果你想要更多的控制,你可以传递模式参数作为RETR_TREE,然后走树,只保留顶级轮廓,并忽略层次结构中低于该级别的任何东西。这样你就可以得到所有的东西,然后你可以决定你想要保留什么以及你想忽略什么。

阅读OpenCV文档的this page,以获取有关findCountours()如何表示层次结构(该页面来自python教程,但它的通用性足以遵循)的信息。

当然,这只有在图像总是与您在问题中给出的例子相似的情况下才起作用 - 即文本始终位于几何形状的内部。如果文字不在形状中,那么也许您可以查看轮廓的大小(边界矩形),并忽略低于某个阈值的任何内容(假设文本轮廓将比您的几何形状小得多)。

+0

我意识到我应该给一个更好的例子。不幸的是,这是行不通的,因为我不知道嵌套层次。例如,我有相邻的矩形创建一个外部矩形(我也需要优化),文本可以出现在任何嵌套深度。编辑:我也想过比较区域大小 - 但我希望更复杂一些,因为etxt也可以是任何大小。 – benjist

+0

也许这两种方法的结合呢?使用RETR_TREE,然后在一个较大的轮廓内寻找一组(两个或多个)小轮廓,其中边界矩形区域的差异大于x百分比?我不知道,只是抛出想法。我只是想用OCR来识别文本是过分的,因为你不关心文本的内容,只是想过滤掉那些不属于形状的东西。文本总是会是某种颜色,还是有限的颜色?也许寻找由另一种颜色包围的黑色或白色像素组? –

+0

或者先将高斯模糊应用于图像?如果足够模糊,文本可能会模糊不清,findCountours()不会找到它,那么它只会给你几何形状?只是另一个想法... –

0

属于文本的轮廓也表示根据您的示例的区域。所以,你可以尝试使用区域的属性,以消除一些不必要的地区(!文本轮廓),我可以建议你可以使用一些性能,如偏心坚固紧凑(你可以在这里找到的代码示例: https://github.com/mribrahim/Blob-Detection

对于前:经常形状和其他人可以通过使用紧凑值来区分,也可以结合其他任何性质