Конвертировать std :: list в cv :: Mat в C ++, используя OpenCV

Я пытаюсь решить систему уравнений, используя 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

Решение

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);
2

Другие решения


По вопросам рекламы [email protected]