将Mat转换为<vector <vector>&gt; C ++ </载体<矢量>

时间:2013-11-19 11:33:47

标签: c++ visual-studio-2010 opencv vector mat

如何在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);
        }
    }

2 个答案:

答案 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

相关问题