使用OpenCV将std :: list转换为cv :: Mat in C ++

时间:2015-05-27 09:26:57

标签: c++ list opencv mat svd

我正在尝试使用SVD解决方程式系统:cv::SVD::solveZ(A, x);,但A需要是矩阵。 OpenCV不提供std::listcv::Mat的任何转换。所以我的问题是,是否有一种智能的方式来转换它,而不必将std::list转换为std::vector

矩阵A是一个3xN矩阵。我的列表包含N cv::Point3d个元素。

我的代码看起来像这样:

std::list<cv::Point3d> points; // length: N
cv::Mat A = cv::Mat(points).reshape(1); // that's how I do it with a std::vector<cv::Point3d>
cv::Mat x;
cv::SVD::solveZ(A, x); // homogeneous linear equation system Ax = 0

如果有人对此有所了解,请告诉我。

1 个答案:

答案 0 :(得分:2)

cv::Mat只能处理连续存储的数据,因此std::list没有合适的转化。但您可以自己实现,如下所示:

std::list<cv::Point3d> points;
cv::Mat matPoints(points.size(), 1, CV_64FC3);
int i = 0;
for (auto &p : points) {
    matPoints.at<cv::Vec3d>(i++) = p;
}
matPoints = matPoints.reshape(1);