10

我想从图像中检测文本区域作为 tesseract OCR 引擎的预处理步骤,当输入仅为文本但当输入图像包含非文本内容时,引擎运行良好,所以我只想检测图像中的文本内容,任何如何做到这一点的想法会有所帮助,谢谢。

4

4 回答 4

7

看看这个用 OpenCV 代码演示的边界框技术:

输入

在此处输入图像描述

侵蚀

在此处输入图像描述

结果

在此处输入图像描述

于 2012-04-19T16:41:50.000 回答
3

好吧,我在图像处理方面的经验并不丰富,但我希望我的理论方法可以帮助你。

在大多数情况下,文本形成平行的水平行,其中行之间的空间将包含大量背景像素。这可以用来解决这个问题。所以......如果你组合图像中的每个像素列,你会得到一个 1 像素宽的图像作为输出。当输入图像包含文本时,输出很可能是一个周期性的模式,其中黑暗区域之后是明亮区域反复出现。这些较暗像素的“”将指示文本内容的位置,而较亮的“组”" 将指示各行之间的间隙。您可能会发现较亮的区域会比其他区域小得多。文本比任何其他图片元素都更通用,因此应该很容易分开。

您必须实施一个程序来检测这些周期性重复。一旦脚本可以确定输入图片具有这些特征,它就很有可能包含文本。(但是,这种方法无法区分实际文本和简单的水平条纹......)

对于下一步,您必须找到一种方法来确定段落的边界,使用上述方法。我正在考虑一个非常虚拟的算法,女巫会将输入图像分成更小、更窄的条纹(50-100 像素),然后分别检查这些区域。然后,它会比较这些结果以构建可能填充文本的区域的地图。这种方法不会那么准确,但它可能不会打扰 OCR 系统。

最后,您需要使用文本映射仅在所需位置运行 OCR。

另一方面,如果输入文本旋转超过 ~3-5 度,此方法将失败。还有另一个倒退,因为如果您只有几行,那么您的模式搜索将非常不可靠。更多行,更准确...

问候,G。

于 2013-01-28T13:21:05.173 回答
2

我是 stackoverflow.com 的新手,但我写了一个与此类似的问题的答案,这可能对任何分享此问题的读者有用。这个问题是否实际上是重复的,因为这是第一个,我将留给其他人。如果我应该在此处复制并粘贴该答案,请告诉我。我也首先在谷歌上发现了这个问题,而不是我回答的问题,所以这可能会使更多的人受益。特别是因为它提供了获取文本区域的不同方法。对我来说,当我查找这个问题时,它不适合我的问题案例。

使用python和opencv检测图像中的文本区域

于 2016-07-25T15:58:50.580 回答
0

当前,检测文本的最佳方法是使用 EAST(一种高效且准确的场景文本检测器)

据作者介绍,EAST 管道能够在 720p 图像上预测任意方向的单词和文本行,此外,可以以 13 FPS 的速度运行。

EAST 快速入门教程可以在这里找到

东纸可以在这里找到

于 2020-10-26T18:27:43.510 回答