如何在C ++中转换2d向量(向量向量)中的Mat? 我试过这个,并在Mat.at函数中出错。
vector<vector<double>> dctm(300, vector<double>(300,0));
for (int i = 0; i < 300; i++) {
for (int j = 0; j < 300; j++) {
dctm[i][j] = img.at<double>(i, j);
}
}
答案 0 :(得分:3)
您可以通过迭代值并逐个推送来填充向量,但一般来说这不是一个好习惯。更好的解决方案是使用stl提供的范围函数。这不仅适用于矢量,也适用于任何其他stl结构。
Cleaner(从stl点视图)和更快的解决方案应该是这样的:
for(int i=0; i<300; i++)
{
Mat r = img.row(i);
dctm.push_back(vector<double>(r.begin<unsigned char>(), r.end<unsigned char>()));
}
答案 1 :(得分:2)
更快的方式
vector<vector<double>> dctm(300, vector<double>(300,0));
for (int i = 0; i < 300; i++) {
uchar *rowPtr = img.ptr<uchar>(i);
for (int j = 0; j < 300; j++) {
dctm[i][j] = *rowPtr[j];
}
}
请参阅How to scan images, lookup tables and time measurement with OpenCV