如何从findHomography获得旋转角度?

问题描述 投票:0回答:1

我想旋转图像而不求助于cv2.warpPerspective()。如何从cv2.findHomography()功能输出获取角度?

It didn't help

# Find homography
H, mask = cv2.findHomography(points1, points2, cv2.RANSAC)

# for example my H:
array([[ 1.20001976e-01,  5.19205433e-04, -1.21739638e+01],
       [ 1.51272694e-03,  1.18686196e-01, -1.59772594e+01],
       [ 1.98308723e-06, -1.18197608e-07,  1.00000000e+00]])

# What should be the someFunction function?
angle = someFunction(H) # from 0 to 360

rotated = imutils.rotate(image, angle=angle)
python opencv math geometry homography
1个回答
0
投票

如果可以确保两组点之间的变换是比例+旋转+平移,那么单应性将只是一个仿射矩阵,其中2x2左上块是比例旋转。在这种情况下,使用以下方法计算角度:

angle = math.atan2(H[0,1], H[0,0])

[如果可以进行其他形式的变换(剪切,投影),则首先对左上2x2块执行SVD分解以恢复旋转会更安全:

u, _, vh = np.linalg.svd(H[0:2, 0:2])
R = u @ vh
angle = math.atan2(R[0,1], R[0,0])
© www.soinside.com 2019 - 2024. All rights reserved.