python - 提高图像中字母的质量

标签 python image opencv letters

我正在处理带有文字的图像。问题是这些图像是收据,经过大量转换后,文本质量下降。 我正在使用 python 和 opencv。 我正在尝试使用来自文档 Morphological Transformations 的形态转换的很多组合,但我没有得到令人满意的结果。

我现在正在做这个(我会评论我尝试过的,只是让我正在使用的取消评论):

kernel = np.ones((2, 2), np.uint8)
# opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
# dilation = cv2.dilate(opening, kernel, iterations=1)
# kernel = np.ones((3, 3), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)
# gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
#
img = erosion.copy()

有了这个,从这个原始图像:

enter image description here

我明白了:

enter image description here

如您所见,它稍微好一点。但还是太糟糕了。 OCR(tesseract)不能很好地识别这里的字符。我训练过,但正如您所注意到的,每个“e”都是不同的,等等。

我得到了很好的结果,但我认为,如果我解决了这个问题,它们会更好。

也许我可以做另一件事,或者使用形态转换的更好组合。如果有其他工具(PIL、imagemagick 等)我可以使用,我可以使用它。

这是完整的图像,因此您可以看到它的外观:

enter image description here

正如我所说,它并没有那么糟糕,但是对字母稍微“优化”一下就完美了。

最佳答案

在这个主题上工作多年之后,我现在可以说,我想做的事情需要付出很大的努力,它很慢,而且从来没有像我预期的那样奏效。字符中像素的不规则性总是不可预测的,这就是为什么“简单的算法”不起作用的原因。

问题:那么不可能有一个像样的OCR,可以读取损坏的字符?

回答:不,这并非不可能。但它需要的不仅仅是使用侵 eclipse 、形态学闭合或类似的东西。

然后呢?神经网络:)

这里有两篇很棒的论文,对我帮助很大:

Can we build language-independent OCR using LSTM networks?

Reading Scene Text in Deep Convolutional Sequences

对于那些不熟悉 RNN 的人,我可以这样建议:​​

Understanding LSTM Networks

还有一个 python 库,它工作得很好(不幸的是,对于 C++ 甚至更好):

ocropy

我真的希望这可以帮助别人。

关于python - 提高图像中字母的质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39375498/

相关文章:

c++ - 从 Canny 检测和标记端点

python - 如何在 OpenCV 3 中使用 Python 的 PCACompute 函数?

python - Numpy 通过交错连接数组

python - 在 Windows 10 上为 Python 3.5 安装 lxml、libxml2、libxslt

html - table-cell > img 额外的 4px 空间

css - 在 div 中居中图像对于它来说太小了吗?

opencv - 在Android中实现ASIFT

python - Python 中带字符串的二进制文件

python - 转到 pdb 中的顶部框架(python 调试器)

css - Magento 目录图像在悬停时发生变化