【发布时间】:2013-09-02 15:37:47
【问题描述】:
我正在处理一些代码,其中执行大量 3x3 矩阵乘法以及使用旋转矩阵等对 3d 点进行一些平移。我决定使用 OpenCV 核心功能进行数学运算。使用最近添加到 cv::Mat 类的构造函数将 cv::Point3d 直接转换为 3x1 cv::Mat 的可能性大大减少并简化了代码。
我现在想知道是否有一种简单的方法可以将 3x1 或 1x3 cv::Mat 转换为 cv::Point3d?我总是可以这样做:
cv::Mat mat(3,1,CV_64FC1);
cv::Point3d p (mat.at<double>(0,0), mat.at<double>(1,0), mat.at<double>(2,0));
或
cv::Mat mat(3,1,CV_64FC1);
const double *data = mat.ptr<double>(0);
cv::Point3d p (data[0], data[1], data[2]);
我非常担心性能(避免对at 方法的3 次调用)。
【问题讨论】: