Хотя тот же вопрос был задан до и был дан ответ, например .:
Я думаю, ясное объяснение очевидного решения до сих пор отсутствует. Отсюда мой ответ.
OpenCV предоставляет два простых способ превращающих std::vector
к cv::Mat
, используя Mat
конструкторов:
Вы можете создать копию векторных данных (если вы измените vector
, данные в Mat
будет без изменений), или создать Mat
вид содержания в векторе (если вы измените vector
, Mat
покажет изменения).
Пожалуйста, взгляните на этот код. Сначала я создаю случайный Mat
двойника, который я копирую в vector
. Затем примените некоторую функцию, которая принимает этот вектор и возвращает новый. Это было только для согласования кода с вашими требованиями. Затем вы можете увидеть, как получить cv::Mat
с std::vector
с копированием или без копирования данных.
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
vector<double> foo(const vector<double>& v)
{
// Apply some operation to the vector, and return the result
vector<double> result(v);
sort(result.begin(), result.end());
return result;
}
int main()
{
// A random CV_8UC1 matrix
Mat1d dsrc(128,128);
randu(dsrc, Scalar(0), Scalar(1));
imshow("Start double image", dsrc);
waitKey();
// Get the vector (makes a copy of the data)
vector<double> vec(dsrc.begin(), dsrc.end());
// Apply some operation on the vector, and return a vector
vector<double> res = foo(vec);
// Get the matrix from the vector
// Copy the data
Mat1d copy_1 = Mat1d(dsrc.rows, dsrc.cols, res.data()).clone();
// Copy the data
Mat1d copy_2 = Mat1d(res, true).reshape(1, dsrc.rows);
// Not copying the data
// Modifying res will also modify this matrix
Mat1d no_copy_1(dsrc.rows, dsrc.cols, res.data());
// Not copying the data
// Modifying res will also modify this matrix
Mat1d no_copy_2 = Mat1d(res, false).reshape(1, dsrc.rows);
imshow("Copy 1", copy_1);
imshow("No Copy 1", no_copy_1);
waitKey();
// Only no_copy_1 and no_copy_2 will be modified
res[0] = 1.0;
imshow("After change, Copy 1", copy_1);
imshow("After change, No Copy 1", no_copy_1);
waitKey();
return 0;
}
[дубликат] (http://stackoverflow.com/questions/20980723/convert-mat-to-vector-float-and-vectorfloat-to-mat-in-opencv) –