【问题标题】:OpenCv, whats the Best way to multiply a 4x4 cv::Mat by a cv::Point3f?OpenCv,将 4x4 cv::Mat 乘以 cv::Point3f 的最佳方法是什么?
【发布时间】:2018-03-22 22:15:39
【问题描述】:

目前我正在以这种方式将一个 4x4 的垫子和一个 Point3f 相乘,

有没有更有效的方法来做这个乘法?

注意:我还需要将结果转换回 cv::Point3f

谢谢

    cv::Mat cam_to_world(4, 4, CV_32FC1);
    ///....
    cv::Mat pointA_cam(4, 1, CV_32FC1);
    pointA_cam.at<float>(0, 0) = OAvec_cam.x;
    pointA_cam.at<float>(1, 0) = OAvec_cam.y;
    pointA_cam.at<float>(2, 0) = OAvec_cam.z;
    pointA_cam.at<float>(3, 0) = 1.0;
    cv::Point3f point_A_wld;
    cv::Mat point_A_world = cam_to_world*pointA_cam;
    point_A_wld.x = point_A_world.at<float>(0, 0);
    point_A_wld.y = point_A_world.at<float>(1, 0);
    point_A_wld.z = point_A_world.at<float>(2, 0);

【问题讨论】:

  • 我认为this & this 可能会有所帮助

标签: c++ opencv visual-studio-2015


【解决方案1】:

这就是我所拥有的,如果有人有更紧凑的解决方案会有所帮助

cv::Mat cam_to_world(4, 4, CV_32FC1);
cv::Mat pointA_cam = cam_to_world*Mat(cv::Vec4f(OAvec_cam.x,OAvec_cam.y,OAvec_cam.z,1.0));
cv::Point3f point_A_wld(cam_to_world.at<float>(0,0),cam_to_world.at<float>(1,0),cam_to_world.at<float>(2,0));

【讨论】:

  • 3 行非常紧凑,如果你在一个函数中使用它,你只需要对复杂的位进行一次修正。
猜你喜欢
  • 2017-12-01
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2021-08-11
  • 1970-01-01
相关资源
最近更新 更多