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

2024-05-04

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

我可以使用一些巧妙的阈值成功提取每个单独的字符。事情变得有点棘手的是匹配角色。即使字体和大小固定,也有一些变量(例如背景颜色和字距调整)会导致相同的数字以略有不同的形状出现。例如,下面的图像被分割成3部分:

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

这些部分都已缩放(两条绿色水平线之间的距离代表一个像素)。

您可以看到,尽管顶部和中间的图像都清楚地表示 2,但它们之间的误差相当高。这会在匹配其他数字时导致误报 - 例如,不难看出,位置合适的 7 比中间图像更好地匹配上图中的目标数字。

目前,我正在通过为每个数字提供一堆训练图像并将目标数字与这些图像进行匹配来处理这个问题,一对一。我尝试获取训练集的平均图像,但这并不能解决问题(其他数字上的误报)。

我有点不愿意使用移动模板执行匹配(它基本上与我现在所做的相同)。有没有比简单绝对差更好的方法来比较两个图像?我在想也许像 EMD(推土机距离,http://en.wikipedia.org/wiki/Earth_mover http://en.wikipedia.org/wiki/Earth_mover's_distance)在 2D 中:基本上,我需要一种对全局移位和局部小变化(白色像素旁边的像素变成白色,或者黑色像素旁边的像素变成黑色)不太敏感的比较方法,但很敏感全局变化(远不及白色像素的黑色像素变成黑色,反之亦然)。

有人能建议一种比绝对差异更有效的匹配方法吗?

我在 OpenCV 中使用 C 风格的 Python 包装器(import cv).


我会考虑使用 Haar 级联。我已经将它们用于面部检测/头部跟踪,似乎您可以使用足够的“2”、“3”、“4”等构建一组相当好的级联。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐