将图像数据复制到cv :: mat的向量

时间:2013-04-24 10:03:57

标签: c++ opencv stdvector

vector <Mat> redAd(adFileName.size());
fill(redAd.begin(), redAd.end(), NULL);
for (int i = 0; i < adFileName.size(); ++i) {
    cout << adFileName[i].c_str() << endl;
    Mat im = imread(adFileName[i].c_str(), 1);
    cout << im.data << endl;
    redAd.push_back(im);
    cout << redAd[i].data << endl;
}

这里,adFileName是包含图像文件路径的字符串向量。这些都是正确打印的。 im.data给出非空值。但在将其推入vector <Mat>并打印元素后显示“应用程序已停止工作”。

应该如何解决?

2 个答案:

答案 0 :(得分:1)

因为,您将矢量大小设置为adFileName.size(),然后将push_back设置为新元素。 您应该构造0大小的向量并使用push_back,否则使用insert。

redAd.insert(redAd.begin()+i,1,im);

答案 1 :(得分:1)

而不是带有NULL的fill,而不是问题,你可以调用默认的向量构造函数vector <Mat> redAd;,然后调用redAd.reserve(adFileName.size()),然后按原样保留循环。