opencv 如何从相机透视图中获取旋转矩阵

j91ykkif  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(181)

我有一个相机安装在一个职位上,这是看着一个特定的领域。我知道确切的真实的世界的位置相机C和我知道的确切大小和现实世界的位置领域P1, P2, P3, P4, W, H
问题是摄像机可能会旋转,我想获得精确的旋转值(偏航、俯仰、滚动)。
我可以很容易地找到所有的角,我使用cv2.getPerspectiveTransform得到透视矩阵H,但我不知道如何从中提取旋转值/矩阵。
我有一个解决方案,得到一些近似值,但它是非常“启发式”,似乎太复杂了。我也可以使用cv2.solvePnP,但它“试图”估计已知的位置,所以它看起来也不是最优的。
我的常识告诉我,我应该只分解矩阵H,但我只是不确定如何分解。我的意思是,它是一个3x 3矩阵,我应该使用4x 4。我可以添加一些1或0,但我真的很想了解我在做什么,而不是“只是有一个工作解决方案”。
我真的很高兴如果有人能帮助我这一点,并给予一个简单的解释。我附上三维投影更好地理解。
编辑:我也做了校准,并有内在的params/矩阵,但现在我想解决它的“虚拟”相机。
提前感谢!
第一次

f87krz0w

f87krz0w1#

好的,我设法找到了解决方案-我使用Grunert's Method作为参考。
TLDR:由于我有平移向量和3个相应的3D-2D点,因此我可以跳过p3 p问题的第一部分(查找从摄像机到3个点的距离),而只关注第二部分,即刚体变换,并从以下等式中获得R矩阵:

使用SVD分解很容易,我使用this作为参考。
@Micka再次感谢你的提示!

相关问题