python - 如何从 findHomography 获取旋转角度?

标签 python opencv math geometry homography

我想旋转图像而不求助于 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)

最佳答案

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

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

如果可以进行一些其他类型的变换(剪切、投影),首先对 2x2 左上角 block 执行 SVD 分解以恢复旋转会更安全:

u, _, vh = numpy.linalg.svd(H[0:2, 0:2])
R = u @ vh
angle = math.atan2(R[1,0], R[0,0])

关于python - 如何从 findHomography 获取旋转角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58538984/

相关文章:

c++ - 尝试在 os x 上构建 opencv 时出错

math - 将矩阵从右手坐标系更改为左手坐标系

python - 当步幅大于 1 时,SAME 填充如何在卷积神经网络中工作?

python - `poetry run black myscript.py` 和 `black myscript.py` 有什么区别?

python - `statsmodels` 和 `sklearn` 中的 Logit 估计器

python-3.x - 在 openCV python 中绘制矩形

visual-studio - OpenCV 调试/步入问题

c# - .NET 中支持的一些舍入算法

math - 直线与矩形的交点

python - 在条件列表上使用逻辑AND的PySpark DataFrame过滤器-Numpy All Equivalent