【问题标题】:How to read a vector of vector of Point - c++如何读取Point向量的向量 - c++
【发布时间】:2013-02-03 20:58:59
【问题描述】:

我有一个Point 的向量向量(称为squares,由squares.cpp (OpenCV) 的findSquares() 函数返回)。

我想对存储在Point的向量中的四个点的x和y坐标求平均值(用c++语言)。

我尝试过这样做:

    vector <Point> coordinates(4);

    for ( int i = 0; i<squares.size();i++) {

        coordinates[0].x += squares[i][0].x;
        coordinates[0].y += squares[i][0].y;

        coordinates[1].x += squares[i][1].x;
        coordinates[1].y += squares[i][1].y;

        coordinates[2].x += squares[i][2].x;
        coordinates[2].y += squares[i][2].y;

        coordinates[3].x += squares[i][3].x;
        coordinates[3].y += squares[i][3].y;
    } 
    if(squares.size() !=0){
        for( int j=0; j<4; j++) {
            coordinates[j].x /= squares.size();
            coordinates[j].y /= squares.size();
        }
    }

但我得到了这个例外:

我以错误的方式读取 Point 向量的向量元素?

【问题讨论】:

  • 你能展示创建squares的过程吗?
  • vector&lt;vector&lt;Point&gt; &gt; squares; findSquares(image,squares);你可以在这个链接找到findSquares(...)函数:[projects.developer.nokia.com/opencv/browser/opencv/opencv-2.3.1/…
  • 安迪的意思是:你如何填充方块?或者你不填充这个向量?我认为这是我们必须看到的函数findSquares()
  • @Cristina1986:我想看到的是findSquares()的代码
  • 尝试做std::cout &lt;&lt; squares[i].size()看向量square[i]的大小是多少。我敢打赌它是空的。

标签: c++ exception opencv vector


【解决方案1】:

注意以下代码:

if (squares.size() !=0){
    for( int j=0; j<4; j++) {
        coordinates[j].x /= squares.size();
        coordinates[j].y /= squares.size();
    }
}

squares.size() 大于 0 但小于 4 时,此代码块可能会在 coordinates[j].x 处崩溃。

想象squares.size() 是2。当j 变成2 时,你认为for 循环中会发生什么?该除法将变为coordinates[2].x /= squares.size();,它试图访问向量中不存在的位置,从而导致崩溃。 记住:如果数组的大小为2,则向量的有效索引为0和1,所以2超出范围。

这是您的代码中的一个问题,可能是导致崩溃的原因。要修复它,请将您的循环更新为:

    for (int j = 0; j < squares.size(); j++) {

如果崩溃继续发生,则问题出在代码中的其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多