图像处理/OCR 技术分离触摸字符

Posted

技术标签:

【中文标题】图像处理/OCR 技术分离触摸字符【英文标题】:Image-processing / OCR technique to separate touching characters 【发布时间】:2021-12-05 01:25:44 【问题描述】:

我正在尝试通过 Tesseract 为 OCR 准备图像。 然而,某些字符序列会接触(由于字体字形上的衬线),这会使它感到困惑。

例如I/U:

我注意到每个角色都有一个明亮的轮廓。如果可以将其替换为深色,则字母将获得一些喘息的空间。

    img_grey[img_grey > 100] = 0

...但我不能让它工作。

有人知道更好的技术吗?

【问题讨论】:

OCR 不需要这个 【参考方案1】:

使用 OpenCV,您可以将其转换为灰度,然后应用 Otsu 的阈值来获得二值化图像,然后对其进行腐蚀:

import cv2         
import numpy as np    

im = cv2.imread('image.png')
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
 
_, th = cv2.threshold(im, 120, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)     

kernel = np.ones((5,5), np.uint8)

# Increase iterations if you want it thinner
eroded = cv2.erode(th, kernel, iterations=2)

cv2.imwrite('eroded.png', eroded)

【讨论】:

【参考方案2】:

你可以尝试腐蚀图像,在opencv中有一个叫做腐蚀的操作,在这种情况下它基本上缩小了字符的厚度。这应该在字符之间留出一些空间,但注意不要过度使用,否则 tesseract 可能无法识别字符。可以通过反复试验获得适量的误差。

请参阅此Link 了解更多详情。

【讨论】:

以上是关于图像处理/OCR 技术分离触摸字符的主要内容,如果未能解决你的问题,请参考以下文章

OCR图像预处理-文字背景分离方法

Java OCR tesseract 图像智能字符识别技术

Java OCR tesseract 图像智能字符识别技术 Java代码实现

移动端车牌识别,OCR光学字符识别技术

印刷字符识别基于matlab OCR印刷字母+数字识别含Matlab源码 1861期

印刷字符识别基于matlab OCR印刷字母+数字识别含Matlab源码 287期