Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 存储简历::Mat';std::vector中的数据_Opencv_Stdvector - Fatal编程技术网

Opencv 存储简历::Mat';std::vector中的数据

Opencv 存储简历::Mat';std::vector中的数据,opencv,stdvector,Opencv,Stdvector,我想将数据从cv::Mat复制到std::vector。很明显,我可以遍历整个Mat并逐个复制每个值,但我希望有一种更简单的方法使用copyTo、clone或某种指针操作 有人对这个问题有什么见解吗 谢谢假设您的垫子是CV_8UC1,您可以执行以下操作 cv::Mat mat(nrows,ncols,CV_8UC1); ... std::vector<unsigned char> vec; vec.assign(mat.data,mat.data+nrows*ncols); cv:

我想将数据从cv::Mat复制到std::vector。很明显,我可以遍历整个Mat并逐个复制每个值,但我希望有一种更简单的方法使用copyTo、clone或某种指针操作

有人对这个问题有什么见解吗


谢谢

假设您的垫子是CV_8UC1,您可以执行以下操作

cv::Mat mat(nrows,ncols,CV_8UC1);
...
std::vector<unsigned char> vec;
vec.assign(mat.data,mat.data+nrows*ncols);
cv::Mat Mat(nrow、ncols、cv_8UC1);
...
std::vec;
向量赋值(物料数据,物料数据+nrows*ncols);

对于具有不同像素类型的多通道图像,我认为您可以轻松地概括上面的代码。

以下是我的工作原理。我有大小为Nx1的
matVec2f
,类型为Vec2f,以及大小为N的向量。下面的代码将Mat的数据复制到向量。我相信这对Vec2f以外的数据类型同样有效

int N = 10;
vector<Point2f> vec(N);
matVec2f.copyTo(Mat(vec, false));
int N=10;
向量vec(N);
matVec2f.copyTo(Mat(vec,false));

在OpenCV中是一个从std::vector到cv::Mat的自动转换器。可能还有相反的转换器。检查InputArray/OutpupArray属性。您可以将mat转换为InputArray,然后使用getVector()或类似的工具。您还可以直接使用带范围参数的向量构造函数
std::vector vec(mat.data,mat.data+nrows*ncols)