You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:20:32