将四元数转换为相机旋转矩阵 - OpenCV

时间:2016-08-09 07:21:37

标签: c++ opencv quaternions

我一直试图用准确的四元数扭曲几张照片而没有运气。下面的等式似乎不会旋转相机位置以及我对精确位置的期望。我做得对吗?我有什么遗失的吗?

据我所知,简单地传递Quaternion不足以拼接照片,但它应该足以对齐照片吗?

以下是公式:

double divmult = 2.0 / lsq;
double xx = divmult * x * x;
double yy = divmult * y * y;
double zz = divmult * z * z;

double wx = divmult * w * x;
double wy = divmult * w * y;
double wz = divmult * w * z;
double xy = divmult * x * y;
double xz = divmult * x * z;
double yz = divmult * y * z;

cameras_global[imageCounter].R = (Mat_<float>(3, 3) << ( 1 - yy - zz ),    -( xy - wz ),   -( xz + wy ),
                                  ( xy + wz ),        -( 1 -xx -zz ), -( yz - wx ),
                                  ( xz - wy ),        -( yz + wx ),   -( 1 -xx -yy )   );

1 个答案:

答案 0 :(得分:1)

OpenCV不直接支持四元数。我不会修复你的计算,而是采用更简单的转换。最接近的是轴角矢量来表示3D旋转(也称为Rodrigues角度)。我会convert to axis-angle,然后将轴乘以角度以获得罗德里格斯角。之后,您可以使用OpenCV的内置函数,例如cv::Rodrigues转换为3x3旋转矩阵。