为何cv::Affine3d(4×4)与cv::Vec3d相乘结果仍为cv::Vec3d?
解答:OpenCV中cv::Affine3d与cv::Vec3d相乘得到cv::Vec3d的原因
这是因为OpenCV为cv::Affine3d重载了operator*运算符,专门适配了3维向量的运算场景,并非直接执行原始的矩阵乘法规则:
cv::Affine3d内部确实存储4×4齐次变换矩阵(包含3×3旋转矩阵、3×1平移向量,最后一行固定为[0,0,0,1])。- 当执行
pose * z_axis时,OpenCV会自动将3维向量z_axis转换为齐次坐标点(补充第四个分量w=1,变为4维向量[0, 0, dev->len, 1])。 - 执行4×4矩阵与该4维齐次向量的乘法,计算结果为
[旋转矩阵×z_axis + 平移向量; 1]。 - 最后自动舍弃第四个分量,返回前3个元素组成的
cv::Vec3d,这就是你看到的输出结果。
如果z_axis是方向向量(不需要叠加平移),可以单独提取旋转矩阵计算:
cv::Vec3d plane_vec = pose.rotation() * z_axis;
内容的提问来源于stack exchange,提问作者hi_world
相关产品推荐
相关产品推荐

