如何获得相机旋转? (阿鲁科图书馆)
How to get the camera rotation? (Aruco Library)
我一直在尝试了解您下载 Aruco 库时包含的 aruco_test.cpp 程序的输出。
输出格式如下:
22=(236.87,86.4296) (422.581,78.3856) (418.21,228.032) (261.347,228.529) Txyz=0.00813142 -0.0148134 0.140595 Rxyz=-2.14032 0.0777095 0.138929
22是marker的唯一标识,后面四对数字是marker的四个角。我这里的问题是两个向量 Tvec 和 Rvec。
我在 Internet 上了解到 tvec 是从我的相机中心到我的对象(在本例中为标记)的平移向量,而 rvec 是对象相对于我的相机的旋转。
关于这个我有几个问题:
如何知道相机的轴?我的意思是,有没有办法知道 x、y 和 z 的朝向?
如何根据相机的对象旋转获得相机的旋转?
谁能更好地解释一下向量的含义,以便我真正理解它?我认为我的主要问题是我真的不知道这些数字的真实含义。
编辑:我一直在做一些测试来检查旋转是如何工作的,但我并不真正理解结果:
- 移动相机,固定在地板上的标记:
初始位置:相机注视着标记 - 'z' 标记轴注视着相机,'y' 向上,'x' 向右:Rxyz=2.40804 -0.0823451 0.23141
在标记的 'x' 轴上移动相机(向上倾斜相机):Rxyz=-1.97658 -0.0506794 -0.020052
在标记的'y'轴上移动相机(将相机向右倾斜):Rxyz=2.74544 -0.118551 -0.973627
将相机旋转90度(向右):Rxyz=1.80194 -1.86528 0.746029
- 移动标记而不是相机,让相机固定在标记上:
使用与前一种情况相同的初始位置。
在其 'x' 轴上移动标记:Rxyz=2.23619 -0.0361307 -0.0843008
在其 'y' 轴上移动标记:Rxyz=-2.9065 -0.0291299 -1.13356
在其 'z' 轴上移动标记(向右转 90º):Rxyz=1.78398 1.74161 -0.690203
我一直假设矢量的每个数字都是在各自轴上的旋转,但我认为我的假设是错误的,因为如果是这样的话,这个值就没有多大意义了。
How can I know the axis of my camera? I mean, is there a way to know
where the x, y and z are facing?
这是在OpenCV library中定义的。 x
轴从图像的左到右增加,y
轴从图像的顶部到底部增加,z
轴向相机前方增加。下图解释了此轴选择。
How can I get the rotation of the camera from the rotation of the
object wrt the camera?
rvec
是marker相对于camera frame的旋转。您可以使用内置的 Rodrigues function 将 rvec
转换为 3x3 旋转矩阵。如果标记与相机框架对齐,则此旋转矩阵应读取 3x3 单位矩阵。
如果你得到这个矩阵的逆(这是一个旋转矩阵,所以逆是矩阵的转置),那就是相机相对于标记的旋转。
Can someone explain me the meaning of the vectors better so I can really understand it?
I think my main problem here is that I don't really know what those
numbers mean for real.
tvec
是从相机框的原点到检测到的标记中心的距离(这是图中的F_c
- P
线。rvec
如上述答案所述。
我一直在尝试了解您下载 Aruco 库时包含的 aruco_test.cpp 程序的输出。
输出格式如下:
22=(236.87,86.4296) (422.581,78.3856) (418.21,228.032) (261.347,228.529) Txyz=0.00813142 -0.0148134 0.140595 Rxyz=-2.14032 0.0777095 0.138929
22是marker的唯一标识,后面四对数字是marker的四个角。我这里的问题是两个向量 Tvec 和 Rvec。
我在 Internet 上了解到 tvec 是从我的相机中心到我的对象(在本例中为标记)的平移向量,而 rvec 是对象相对于我的相机的旋转。
关于这个我有几个问题:
如何知道相机的轴?我的意思是,有没有办法知道 x、y 和 z 的朝向?
如何根据相机的对象旋转获得相机的旋转?
谁能更好地解释一下向量的含义,以便我真正理解它?我认为我的主要问题是我真的不知道这些数字的真实含义。
编辑:我一直在做一些测试来检查旋转是如何工作的,但我并不真正理解结果:
- 移动相机,固定在地板上的标记:
初始位置:相机注视着标记 - 'z' 标记轴注视着相机,'y' 向上,'x' 向右:Rxyz=2.40804 -0.0823451 0.23141
在标记的 'x' 轴上移动相机(向上倾斜相机):Rxyz=-1.97658 -0.0506794 -0.020052
在标记的'y'轴上移动相机(将相机向右倾斜):Rxyz=2.74544 -0.118551 -0.973627
将相机旋转90度(向右):Rxyz=1.80194 -1.86528 0.746029
- 移动标记而不是相机,让相机固定在标记上:
使用与前一种情况相同的初始位置。
在其 'x' 轴上移动标记:Rxyz=2.23619 -0.0361307 -0.0843008
在其 'y' 轴上移动标记:Rxyz=-2.9065 -0.0291299 -1.13356
在其 'z' 轴上移动标记(向右转 90º):Rxyz=1.78398 1.74161 -0.690203
我一直假设矢量的每个数字都是在各自轴上的旋转,但我认为我的假设是错误的,因为如果是这样的话,这个值就没有多大意义了。
How can I know the axis of my camera? I mean, is there a way to know where the x, y and z are facing?
这是在OpenCV library中定义的。 x
轴从图像的左到右增加,y
轴从图像的顶部到底部增加,z
轴向相机前方增加。下图解释了此轴选择。
How can I get the rotation of the camera from the rotation of the object wrt the camera?
rvec
是marker相对于camera frame的旋转。您可以使用内置的 Rodrigues function 将 rvec
转换为 3x3 旋转矩阵。如果标记与相机框架对齐,则此旋转矩阵应读取 3x3 单位矩阵。
如果你得到这个矩阵的逆(这是一个旋转矩阵,所以逆是矩阵的转置),那就是相机相对于标记的旋转。
Can someone explain me the meaning of the vectors better so I can really understand it? I think my main problem here is that I don't really know what those numbers mean for real.
tvec
是从相机框的原点到检测到的标记中心的距离(这是图中的F_c
- P
线。rvec
如上述答案所述。