在进行OCR之前进行预处理(tesseract,OpenCV)

时间:2015-04-09 08:37:10

标签: c++ opencv image-processing ocr tesseract

为了使用OCR库tesseract获得更好的结果,我会做一些预处理,但是没有正确的想法,哪些步骤可以帮助我。

enter image description here enter image description here

我尝试使用因子15调整图像大小并应用适应的阈值(请参见图像),但这会产生“波浪”字符,使用tesseract OCR库无法检测到这些字符。在底部,您可以通过Dropbox找到我的图像链接。原始图像尺寸为115x18像素,字符高度为10像素。

我想从后台提取字符。哪些步骤可以带来更好的结果?我应该使用另一个OCR库而不是tesseract用于OCR部分吗?使用tesseract进行文本检测时,您一般会有哪些经验?或者您可以选择其他图书馆或商业图书馆吗?

Dropbox Link to example image

更新19.6.15:

Original Image OTSU Thresholded image

OTSU阈值可提供更好的结果作为自适应阈值。将在接下来的几天内提供有关其他答案的最新消息!

2015年7月1日更新 有另一个示例图像,其中应使用tesseract识别序列号。由于字体很小,识别结果不是很好。有什么想法可以提供帮助吗?

Another example image

4 个答案:

答案 0 :(得分:2)

Otsu阈值在这里给我更好的结果。结合距离变换和另一个阈值,我甚至可以通过tesseract获得几乎可识别的东西。

enter image description here

这是我得到的结果:

  

6ANFK9PC)100'0-GT

答案 1 :(得分:0)

您可以尝试查找所有轮廓并删除小面积的轮廓 处理" wevy"字符可能更复杂。我现在唯一的想法是使用距离变换和阈值处理(使用二进制阈值)结果(找到好的阈值可能不简单 - 我会尝试使用maxValue * 0.25的归一化距离变换)。

答案 2 :(得分:0)

你可能想尝试在第二张图像上进行少量的侵蚀和扩张,这可能会使角色中的某些波浪均匀,这两种侵蚀/膨胀的混合物也会消除周围的小白点噪声,这总是有助于OCR。

查看this OpenCV文档,它将为您提供一些示例代码以帮助您入门并解释它是如何工作的。

希望这有帮助。

答案 3 :(得分:0)

为什么不只是“锐化”(这将删除白色边框并使白线变薄)然后简单地反转黑白?