gpt4 book ai didi

opencv - 如何确定OpenCV在世界空间(而不是Charuco板的方向)中的摄像机旋转角度?

转载 作者:行者123 更新时间:2023-12-02 17:45:18 24 4
gpt4 key购买 nike

在OpenCV中,我使用的是Charuco板,已经校准了相机,并使用SolvePnP获取rvec和tvec。 (类似于示例代码)。我使用的是固定板,摄像机在绕板旋转的圆形钻机上。我对此很菜鸟,所以如果我想念这简单的东西,请忍受。

我知道我可以使用Rodrigues()从rvec获取3x3的旋转方向,以确保板的方向,并且可以使用-R.t()* tvec(在c++中)将tvec值转换为世界坐标。

但是,据我所知,此3x3旋转R给出了板相对于相机的方向,因此并不是完全需要的。我想要相机本身的旋转,它相对于R偏移(我认为)是相机空间中tvec与z轴之间的 Angular 。 (因为相机并不总是指向板子原点,而是始终指向相机空间中的z轴)。它是否正确?

如何找到附加的旋转偏移并将其转换为3x3旋转矩阵,可以将其与R组合以获得实际的相机方向?

谢谢!

最佳答案

假设您从相机捕获了Charuco板的N帧。然后,您进行了N个转换,将相机框架中的一个点移到Charuco板框架中的一个点。这是从每帧Charuco板姿势获得的。

假设我们表示从一个坐标系到另一个坐标系的线性变换,如T4x4 = [R3x3,t3x1; [01x3,1]如果我们从板坐标系中查看点P,并将其称为Pboard。同样,我们从摄像机1(称为c1),摄像机2(称为c2)等进行观察。

因此,我们可以这样写:

电路板= T1Pc1
电路板= T2Pc2



Pboard = TNPcN

据我了解,您需要从起点说摄像机的旋转 Angular (假设摄像机在第1帧中的旋转 Angular 为零)。因此,您可以用Pc1而不是Pboard来表示每个后续帧。

所以,我们可以说
T2Pc2 = T1Pc1
或者,Pc2 = T2-1T1Pc1
同样,PcN = TN-1T1Pc1

您可以通过查看TN-1T1的旋转部分来恢复从摄像机位置N到摄像机位置1的取点RN。

关于opencv - 如何确定OpenCV在世界空间(而不是Charuco板的方向)中的摄像机旋转角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com