C++ 摄影机外部矩阵到世界坐标

C++ 摄影机外部矩阵到世界坐标,c++,matrix,C++,Matrix,我有一个摄像机矩阵,如下所示: 0.999995,-0.00313698,4.29446e-06, 0.632334 0.00313675,0.999936,0.0108695,0.0111429 -3.83917e-05,-0.0108695,0.999941,-21.8834 0,0,0,1 由旋转矩阵R组成: 0.999995,-0.00313698,4.29446e-06, 0.00313675,0.999936,0.0108695, -3.83917e-05,-0.010

我有一个摄像机矩阵,如下所示:

 0.999995,-0.00313698,4.29446e-06, 0.632334
 0.00313675,0.999936,0.0108695,0.0111429
 -3.83917e-05,-0.0108695,0.999941,-21.8834
0,0,0,1
由旋转矩阵R组成:

 0.999995,-0.00313698,4.29446e-06,
 0.00313675,0.999936,0.0108695,
 -3.83917e-05,-0.0108695,0.999941
和转换矩阵T:

  0.632334, 0.0111429,-21.8834
我需要做的是把它从摄像机转移到世界空间。我有一个公式,它是:

    'Rotation from camera to world is simply 
inv(R) = transpose(R). 
T is the pre-rotated camera center, 
T = -R C, so C = -inv(R) T = (x,y,z).'
我是矩阵数学的初学者,对如何进行感到困惑。我如何取R矩阵,在C++中,做上述?< /P>
谢谢。

感谢@Scheff在正确方向上的推动,我有了一个答案:

void cameraMatrixToWorldSpace()
{

    Eigen::Matrix3f R0;
    Eigen::Vector3f T0;
    Eigen::Vector3f C0;

    T0 << 0.632334, 0.0111429, -21.8834;

    R0 << 0.999995, -0.00313698, 4.29446e-06,
        0.00313675, 0.999936, 0.0108695,
        -3.83917e-05, -0.0108695, 0.999941;


//inverse rotation matrix
    R0.transposeInPlace();  

    std::cout << "rotation 0: " << R0 <<  std::endl;

    //to euler radians
    Vector3f ea0 = R0.eulerAngles(0, 1, 2);

    cout << "Euler 0 :" << endl;
    cout << ea0 << endl << endl;

    //world space translation
    C0 = -R0 * T0;

    std::cout << " Translation 0 : " << C0 << std::endl;

}
void cameraMatrixToWorldSpace()
{
本征::矩阵x3f R0;
本征::向量3f T0;
本征::向量3f C0;

T0谷歌“C++4x4矩阵”。这里有很多免费的库和示例…嗨,谢谢你的回复。这是我困惑的公式。在:
inv(R)=转置(R).
,谷歌告诉我,逆矩阵和转置矩阵是不同的。它们怎么可能相等?我应该得到逆矩阵吗?还是转置矩阵?@CMouse对于一般矩阵,逆矩阵和转置是不同的。(例如,逆矩阵只能在非奇异矩阵上实现,转置总是适用的。)仅包含旋转的矩阵是例外-在本例中,逆是转置。因此,反转旋转矩阵成为一个非常便宜的操作。另请参见:好!因此,使用Eigen,我可以简单地:
Matrix3f R;R=R.inverse();
,正确吗?可能。或者,您使用
R.