【问题标题】:Image-processing / OCR technique to separate touching characters图像处理/OCR 技术分离触摸字符
【发布时间】:2021-12-05 01:25:44
【问题描述】:
我正在尝试通过 Tesseract 为 OCR 准备图像。
然而,某些字符序列会接触(由于字体字形上的衬线),这会使它感到困惑。
例如I/U:
我注意到每个角色都有一个明亮的轮廓。如果可以将其替换为深色,则字母将获得一些喘息的空间。
img_grey[img_grey > 100] = 0
...但我不能让它工作。
有人知道更好的技术吗?
【问题讨论】:
标签:
python
numpy
opencv
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 了解更多详情。