【发布时间】:2019-10-03 10:40:14
【问题描述】:
在 OpenCV 中,我有 cv::Mat 对象。
它是一个通道,格式为 CV_8UC1 = unsigned char。
连续,即数据存储在一个地方,逐行存储。
我知道 cv::Mat 对象的行数和列数。
我有大小为 2D std::vector 向量 vec1(行,向量(img.cols));
如何在不复制的情况下将 cv::Mat 对象的数据分配给 std::vector 。
对于复制,很容易创建一个 for 循环,或者使用带有迭代器的 vector::assign。
cv::Mat 和 2D-std::vector 的数据存储方式相同。两者都有一个指向数据的内部指针(vector::data 和 Mat::ptr),但 vector::data 不能设置为 Mat::ptr 的值。
目前,我有复制数据的代码:
cv::Mat img = cv::imread("test.tif");
cv::cvtColor(img, img, cv::COLOR_BGR2GRAY);
vector< vector<double> > vec1(img.rows, vector<double>(img.cols));
for(int i=0; i < img.rows; ++i)
for(int j=0; j < img.cols; ++j)
vec1.at(i).at(j) = img.at<double>(i, j);
谢谢。
【问题讨论】:
-
你不能用
vector。也许span? -
貌似
cv::Mat类中数据的指针是public,也就是说可以通过img.data直接访问。但是,你无法操作指向std::vector中数据的指针,所以恐怕无法为所欲为。 -
这根本不可能。您不能将向量的数据设置到其他地方管理的某些内存中。