我正在尝试通过移动拍摄的照片进行光学字符识别。在预处理的第一阶段之后,我有如下图像:
我遇到的第一个问题是它是旋转的,我用下面的代码解决了它:
import cv2
import numpy as np
def rotateImage(image):
inverse = (255-image)
lines = cv2.HoughLines(inverse, 2, np.pi/180, 100)
angle = lines[0][0][1]
shape = (image.shape[1], image.shape[0])
image_center = tuple(np.array(shape)/2)
rot_mat = cv2.getRotationMatrix2D(image_center,-angle,1.0)
result = cv2.warpAffine(image, rot_mat, shape,flags=cv2.INTER_LINEAR)
return result
img = cv2.imread('image.png', 0)
rotated = rotateImage(img)
cv2.imshow('rotated', rotated)
这基本上可以找到字符下方水平线的角度,并以该角度旋转图像。
然而,我现在的主要问题是,当我尝试进行OCR时,垂直线有时会被读作“l”或“1”。你会采用什么方法删除那些垂直线和/或在字符之间用它们进行OCR?
必须考虑的事项:
旋转并不完美,所以我们不能假设线条是纵向的。
有时候角色会碰到线条,难以检测到它们。