我正在尝试使用SVD解决方程式系统:cv::SVD::solveZ(A, x);
,但A
需要是矩阵。 OpenCV不提供std::list
到cv::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
如果有人对此有所了解,请告诉我。
答案 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);