如何使用包含vector <mat> </mat>的Vector Vector

时间:2014-03-04 18:30:10

标签: c++ opencv vector struct

我试图声明一个结构,

struct Sample {
    int classLabel[2];
    vector<Mat> image; 
};

现在我想使用它,我将其初始化为

Sample sample1;

并在sample1中保存5张图片,并创建另一张Sample sample2并保存另外5张图片。 现在我想将这两个样本保存在Sample的向量中。我宣布:

vector<Sample> samples;

现在当我尝试在样本中推送sample_back sample1和sample2时

samples.push_back(sample1);
samples.push_back(sample2);
它没有给我什么。示例显示为samples[2]但不包含classLabel=???image=????前面的问号

任何身体都可以指导我在哪里犯错误。我怎样才能使它变得可用。我的意思是在sample1中正确保存结构sample2samples。 会感恩的。 此致

1 个答案:

答案 0 :(得分:2)

vector<Sample> samples;
samples.push_back(sample1);
samples.push_back(sample2);

在此之后,samples的尺寸为2.因此,您只能访问samples[0]samples[1],而不是samples[2]


正如@sammy评论的那样,Watch中的变量可能会在VS中显示不正确的值。

要使其正常工作,您可能需要按照以下步骤操作:

  1. 检查应用程序及其依赖项(如果需要)是否以调试模式构建。
  2. 确保禁用优化。编译时使用 /Od 选项。
  3. 结构成员对齐。当有一堆项目一起编译时,项目内该字段的值不同可能会导致显示值无效。在所有项目中重置为默认值。值在配置属性 - &gt;下C / C ++ - &gt;代码生成 - &gt;结构成员对齐
  4. 查看here了解详情。


    修改:对于评论中的代码:

    sample1.classlabel[0] = 0; 
    sample1.classlabel[1]=1;
    vector<Mat> temp; 
    temp.push_back(img1); 
    temp.push_back(img2); 
    temp.push_back(img3); 
    sample1.image=temp; 
    
    sample2.classlabel[0] = 0; 
    sample2.classlabel[1]=1; 
    vector<Mat> temp1; 
    temp.push_back(img5);         // problem
    temp.push_back(img6);         // problem
    temp.push_back(img7);         // problem
    sample2.image=temp1; 
    
    samples.push_back(sample1); 
    samples.push_back(sample2);
    

    3个问题行应改为

    temp1.push_back(img5);
    temp1.push_back(img6);
    temp1.push_back(img7);