屏幕截图中的低分辨率文本的OCR

mpe*_*kov 8 python ocr opencv

我正在编写一个OCR应用程序来读取截图图像中的字符.目前,我只关注数字.我在博客文章中部分基于我的方法:http://blog.damiles.com/2008/11/basic-ocr-in-opencv/.

我可以使用一些聪明的阈值来成功提取每个角色.事情变得有点棘手的是匹配角色.即使使用固定的字体和大小,也有一些变量,如背景颜色和字距调整,导致相同的数字以略微不同的形状出现.例如,下面的图像分为3部分:

  1. 顶部:我从屏幕截图中成功提取的目标数字
  2. 中:模板:我训练集中的一个数字
  3. 底部:顶部和中间图像之间的误差(绝对差异)

所有部件都已缩放(两条绿色水平线之间的距离代表一个像素).

topbottommiddle

您可以看到,尽管顶部和中间图像都清晰地表示为2,但它们之间的误差非常高.当匹配其他数字时,这会导致误报 - 例如,不难看出位置优良的7如何能够匹配上图中的目标数字,而不是中间图像.

目前,我正在处理这个问题,方法是为每个数字提供一堆训练图像,并将目标数字与这些图像逐一匹配.我尝试拍摄训练集的平均图像,但这并不能解决问题(其他数字的误报).

我有点不愿意使用移位模板进行匹配(它与我现在正在做的基本相同).比较简单的绝对差异是否有更好的方法来比较两个图像?我想到的可能是2D中的EMD(地球移动距离,http://en.wikipedia.org/wiki/Earth_mover's_distance):基本上,我需要一种对全局移动不敏感的比较方法.小的局部变化(白色像素旁边的像素变为白色,或者黑色像素旁边的像素变为黑色),但对全局变化敏感(白色像素附近的黑色像素变为黑色,反之亦然).

任何人都可以提出比绝对差异更有效的匹配方法吗?

我正在使用C风格的Python包装器(import cv)在OpenCV中完成所有这些.

rsa*_*xvc 6

我会考虑使用Haar级联.我已经将它们用于人脸检测/头部跟踪,看起来你可以用足够的'2','3','4'来构建一组非常好的级联,等等.

http://alereimondo.no-ip.org/OpenCV/34

http://en.wikipedia.org/wiki/Haar-like_features