Opencv 给定第一个摄像机姿势,标定立体装置第二个摄像机的姿态估计

Opencv 给定第一个摄像机姿势,标定立体装置第二个摄像机的姿态估计,opencv,3d,computer-vision,Opencv,3d,Computer Vision,我用opencv校准了一对立体相机。这将导致两个摄影机之间的旋转和平移 我使用第一个摄像头(左)拍摄图像,并使用solvePnp计算左摄像头相对于零件的姿势(rvec和tvec) 我的问题是如何使用左摄像机的姿态以及立体校准中给定的R&T值来计算右摄像机的姿态 谢谢。这个问题有点不清楚,但我认为您希望找到正确相机相对于零件的姿势。如果是这种情况,最简单的方法如下: 假设Q_pl是左摄影机相对于零件的姿势。这由一个4x4矩阵表示,其前3行和列是零件w.R.t.的旋转矩阵R_pl。左摄像机(您的r

我用opencv校准了一对立体相机。这将导致两个摄影机之间的旋转和平移

我使用第一个摄像头(左)拍摄图像,并使用solvePnp计算左摄像头相对于零件的姿势(rvec和tvec)

我的问题是如何使用左摄像机的姿态以及立体校准中给定的R&T值来计算右摄像机的姿态


谢谢。

这个问题有点不清楚,但我认为您希望找到正确相机相对于零件的姿势。如果是这种情况,最简单的方法如下:

  • 假设Q_pl是左摄影机相对于零件的姿势。这由一个4x4矩阵表示,其前3行和列是零件w.R.t.的旋转矩阵R_pl。左摄像机(您的rvec),下行是[0,0,0,1],4列的前3行是从摄像机到零件(您的tvec)的平移向量t_pl的分量。为了说明这一点,您可以通过将零件的x、y和z轴单位向量(从相机上看)的相机帧中的分量作为列向量,然后是从相机到零件的向量,并将[0,0,0,1]作为第四行,来写入Q_pl
  • 同样,假设Q_lr是左摄像机相对于右摄像机的姿态(通过校准获得)。将左摄像机的x、y、z单位向量的分量(如右图所示)作为列向量,然后是从右摄像机到左摄像机的平移向量,然后将[0,0,0 1]作为第四行写入该4x4矩阵
  • 然后,右摄像机的w.r.t.部分姿势就是两个矩阵的乘积:

    Q_pr=Q_pl*Q_lr

请注意,因子的顺序很重要。这个表达式只是说,要从右摄影机转到零件,可以先从右摄影机转到左摄影机,然后再从右摄影机转到零件。同样,该变换的旋转部分位于Q_pr的前3行和前3列,从右摄影机到该部分的平移向量位于第4列

请注意,您的校准程序可能给出了Q_rl,而不是Q_lr。如果是这样的话,你只要把它颠倒过来。逆运算非常容易计算:

R_lr = transpose(R_rl)
t_lr = -(R_lr * t_rl)
同样,如果您的solvePnP产生的是Q_lp,那么您将反转Q_lp,而不是Q_pl