我正在开发一个处理银行检查的应用程序。但是当银行的支票图像可以倾斜或稍微旋转最大值20度的角度时。在处理检查之前,我需要正确对齐这个倾斜的图像。我被困在这里。
我最初的想法是,我将首先尝试使用Hough Line Transform在#34;理想的检查图像中获得直线水平线"。一旦我得到了直线的数量,我将使用相同的技术来检测倾斜图像中的直线。如果行数小于某个阈值,我将检测到图像偏斜。以下是我的尝试:
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,50)
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,1000,100)
if len(lines[0]) > 2:
#image is mostly properly aligned
else:
#rotate it by some amount to align it
然而,这让我无法找到它倾斜的角度。如果我能找到角度,我可以做以下事情:
#say it is off by +20 degrees
deg = 20
M = cv2.getRotationMatrix2D(center, -deg, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
然后我想到了使用标量积来获得旋转角度。但是,使用其中两个元素的标量积?我不能从"坏"中得到元素。检查"理想"中的坐标。检查,因为它的内容是倾斜的。那么,在openCV中是否有任何方式,我可以说,它可以叠加"坏" #34;理想"一个并以某种方式计算它关闭的角度?
答案 0 :(得分:1)
在您的情况下,我要做的是使用与模板检查图像匹配的功能在图像中查找检查。然后你只需要找到从一个到另一个的转换并从中推导出角度。
看一下教你如何做的this OpenCV tutorial。
修改强>
事实上,如果你想要的是让银行检查方向正确,那么单应性就是正确的工具。无需提取角度。只需将它应用于您的图像(或其反转取决于您的计算方式),您应该得到漂亮的支票,准备好进行处理。