背景
我想检测所有的轮廓在图像中,包含2D几何形状,但删除任何看起来像文本。
示例输入:
我试图通过Tesseract检测文本区域,然后删除这些文本区域。对于一些OCR识别良好的图像,这是很好的工作,因此文本区域识别率相当高,然后可以删除识别文本的轮廓。但是对于大多数图像,文本没有很好的识别,因此我不能从图像中删除不相关的文本轮廓。
因此,我的问题是:我如何区分文本样轮廓与我的二维“几何”轮廓?
发布于 2017-04-17 11:48:25
如果您不关心文本,只想摆脱它,那么就可以通过将RETR_EXTERNAL
作为模式参数传递给findCountours()
函数来检测外部轮廓。这会给你最外层的轮廓,忽略任何包含在几何形状内的东西。
或者,如果您想要更多的控制,您可以将模式参数作为RETR_TREE传递,然后遍历树,只保留顶层等高线,而忽略层次结构中该级别以下的任何内容。这样你就能得到所有的东西,然后你可以决定你想要保留什么,你想忽略什么。
阅读此页的OpenCV文档,了解findCountours()
如何表示层次结构的信息(该页面来自于python教程,但它足够通用,可以遵循)。
当然,只有当图像看起来总是类似于你在问题中给出的例子时,这才会起作用--即文本总是在几何图形的内部。如果在形状之外有文本,那么也许可以查看轮廓的大小(包围矩形),忽略任何低于某个阈值的内容(假设文本轮廓将比几何形状小得多)。
发布于 2017-04-17 14:42:16
属于文本的等值线,也根据您的示例表示一个区域。这样您就可以尝试使用区域的属性来消除一些不必要的区域(文本等值线!)我可以建议您使用一些属性,如偏心性、solidity或紧致性(您可以在这里找到代码示例:https://github.com/mribrahim/Blob-Detection )。
对于示例:规则形状和其他形状可以使用紧致值来区分,也可以组合任何其他属性。
https://stackoverflow.com/questions/43450322
复制相似问题