我正在尝试从带有框的表单的所有字段中提取字符,例如此处显示的框:
示例打印表格
我当前的方法如下:
这些框在图像中可能会稍微倾斜。我使用对齐算法,但是它仍然不能总是拉直盒子的边缘。在这张图中可以看到:
对齐日期作物
。
在此类图像上,当我使用直线裁切字符时(上述算法的第3步),还包括了框的边缘,这会使字符识别模块感到困惑。例如,数字“ 3”和“盒子边缘”有时表示为31。
我只想使用经过预先训练的模型,因此,我正在寻找一种更好的方法来从装箱的字段中正确提取字符。
我非常感谢SO社区提供的任何帮助。
答案 0 :(得分:1)
由于通常情况下,框的边缘比框内的文本要薄,所以我们可以利用这些信息。 通过应用水平形态学封闭核(“膨胀”->“侵蚀”),我们可以使垂直细线变为白色,这将有助于OCR。处理后可能会留下一些垃圾,但这不会影响OCR的准确性。内核的大小取决于边界线的宽度。显然,您可以根据自己的情况进行调整。
这是示例代码:
import cv2
import numpy as np
im = cv2.imread('sample_image.png')
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
k1 = (4,1)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, k1)
im = cv2.morphologyEx(im, cv2.MORPH_CLOSE, kernel, iterations=1)
_,im = cv2.threshold(im, thresh=200, maxval=255, type=cv2.THRESH_BINARY)
cv2.imwrite('sample_output.png',im)
这是图像: