【问题标题】:calculate angle of rotation image wrt another image计算旋转图像wrt另一个图像的角度
【发布时间】:2016-10-19 01:25:00
【问题描述】:

我正在开发一个处理银行支票的应用程序。但是当银行的支票图像可以倾斜或轻微旋转最大值 20 度的角度时。在处理支票之前,我需要正确对齐这个倾斜的图像。我被困在这里了。

我最初的想法是,我将首先尝试在“理想检查图像”中使用霍夫线变换获得水平直线。一旦我得到直线的数量,我将使用相同的技术来检测倾斜图像中的直线。如果行数小于某个阈值,我会将图像检测为倾斜。以下是我的尝试:

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 中是否有任何方法可以让我将“坏”图像叠加在“理想”图像上并以某种方式计算它偏离的角度?

【问题讨论】:

    标签: python opencv image-processing


    【解决方案1】:

    在您的情况下,我会做的是使用与您的模板检查图像匹配的特征在图像中找到检查。然后你只需要找到从一个到另一个的转换并从中推断出角度。

    看看this OpenCV tutorial,它教你如何做到这一点。

    编辑:

    事实上,如果您想要让银行支票以正确的方向进行,那么单应性就是正确的工具。无需提取角度。只需将其应用于您的图像(或根据您的计算方式将其应用于图像),您应该会得到一张漂亮的支票,准备好进行处理。

    【讨论】:

    • “那么你只需要找到从一个到另一个的转换,并从中推断出角度” - 你能详细说明吗?
    • @Tejash Desai 如果您使用这种方法,您可能甚至不需要角度。找到理想支票和图像之间的单应性,并将其逆应用于您的图像以获得校正支票。
    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多