我想从图像中检测文本区域作为tesseract OCR引擎的预处理步骤,当输入只是文本时引擎运行良好但是当输入图像包含非文本内容时它会下降,所以我想只检测文本内容图片,任何有关如何做到这一点的想法都会有所帮助,谢谢。
答案 0 :(得分:7)
答案 1 :(得分:2)
嗯,我在图像处理方面经验不足,但我希望能用你的理论方法帮助你。
在大多数情况下,文本形成平行的水平行,其中行之间的空间将包含批次的背景像素。这可以用来解决这个问题。 所以...如果您撰写图像中的每个像素列,您将获得1像素宽的图像作为输出。当输入图像包含文本时,输出很可能是周期性图案,其中暗区域后面是重复较亮的区域。这些较暗像素的“组”将指示文本内容的位置,而较亮的“组”将指示各行之间的间隙。 您可能会发现较亮的区域会比其他区域小得多。文本比任何其他图片元素更通用,因此它应该很容易分开。
您必须实施一个过程来检测这些周期性重复。一旦脚本可以确定输入图片具有这些特征,它就很有可能包含文本。 (但是,这种方法无法区分实际文本和简单的水平条纹......)
对于下一步,您必须使用上述方法找到确定段落边界的方法。我正在考虑一个非常虚拟的算法,将输入图像分成更小,更窄的条纹(50-100像素),并分别检查这些区域。然后,它将比较这些结果以构建填充文本的可能区域的地图。这种方法不会那么准确,但它可能不会打扰OCR系统。
最后,您需要使用文本地图仅在所需位置上运行OCR。
另一方面,如果输入文本旋转超过~3-5度,此方法将失败。还有另一个退货,如果你只有几行,那么你的模式搜索将是非常不可靠的。更多行,更准确......
问候,G。
答案 2 :(得分:2)
我是stackoverflow.com的新手,但我写了一个类似于这个问题的答案,这对任何分享这个问题的读者都有用。这个问题是否真的是重复的,因为这个问题是第一个,我会留给其他人。如果我在这里复制并粘贴答案,请告诉我。我也首先在谷歌而不是我回答的问题上找到了这个问题所以这可能会让更多有链接的人受益。特别是因为它提供了获取文本区域的不同方法。对我来说,当我查看这个问题时,它不适合我的问题。
答案 3 :(得分:0)