如何在OPENCV C ++中将元素存储到向量的向量中

时间:2016-11-07 23:46:45

标签: c++ opencv vector

我有矢量" lines2"我从HoughLinesP转型得到的。我有二进制图像的距离变换。 Lines2只有行的起点和终点,因此使用LineIterator我遍历所有行并获取这些点之间的坐标。然后我使用这些坐标从距离图像中获取值。最后,我想将所有值存储在" lines3"中,而不是存储i ++,存储下一个等等。 这是代码:

distanceTransform(img_bin, img_dist, CV_DIST_C, 3);
imshow("Distance Transform Image", img_dist);

//Go through the merged lines with LineIterator to get all the points between the endings
vector<vector<int>> lines3(lines2.size());
int val;

for (size_t i = 0; i < lines2.size(); i++) {

    LineIterator it(img_dist, Point(lines2[i][0], lines2[i][1]), Point(lines2[i][2], lines2[i][3]), 8);
    vector<Point> points(it.count);

    for (int j = 0; j < it.count; j++, ++it)
    {
        points[j] = it.pos();
        //cout << "points[j]: " << points[j] << endl;
        //check the value of pos() at the distance transformated image and store it in lines3
        val = img_dist.at<float>(points[j].y, points[j].x);
        //lines3(i,j)[0].push_back(val);
        //lines3[i][j].push_back(val);
        //lines3[i][j] = val;
        //lines3(i,j) = val;
        //lines3[j].push_back(val);
        lines3[i][j].push_back(val); //THIS LINE doeasn't even compile
    }
}

问题:我该怎么做? push_back在这里不起作用。

编辑: 在第3行&#39;添加了一些初始大小。但仍然不知道如何用[i] [j]用线条和线条填充向量。

lines3 [j]的.push_back(VAL); //此线路编译但运行时失败,出现越界错误(当然)

1 个答案:

答案 0 :(得分:1)

我将此发布给未来,所以也许其他人不会像我这样坚持下去。 正如DanMašek在评论中提到的,我需要更换

lines3[i][j].push_back(val);

lines3[i].push_back(val);

现在它工作正常!谢谢!