【问题标题】:C++ vector::erase problems with OpenCV codeC++ vector::erase 与 OpenCV 代码有关的问题
【发布时间】:2011-09-13 20:39:58
【问题描述】:

我的部分 OpenCV C++ 代码有问题:

double getVectorMedian( vector<double> values )
{
    size_t size = values.size();
    double median;

    sort(values.begin(), values.end());

    if( size % 2 == 0 )
    {
        median = (values[size / 2 - 1] + values[size / 2]) / 2;
    }
    else
    {
        median = values[size / 2];
    }

    return median;
}

void cleanSquares( const vector<vector<Point> >& squares )
{
    float tolerance = 0.2;
    size_t size = squares.size();
    vector<double> areas(size);

    for( size_t i = 0; i < size; i++ )
    {
        areas[i] = fabs(contourArea(Mat(squares[i])));
    }

    double medianArea = getVectorMedian(areas);
    double minArea = medianArea * (1 - tolerance);
    double maxArea = medianArea * (1 + tolerance);

    for( unsigned int i = size - 1; i >= 0; i--)
    {
        if( areas[i] > maxArea || areas[i] < minArea )
        {
            squares.erase(squares.begin() + i); // Here I get the error
        }
    }
}

我得到的错误是

no matching function for call to ‘std::vector<std::vector<cv::Point_<int> > >::erase(__gnu_cxx::__normal_iterator<const std::vector<cv::Point_<int> >*, std::vector<std::vector<cv::Point_<int> > > >) const’   main.cpp    /find_notes/src line 154    C/C++ Problem

我正在修改 OpenCV squares.cpp 示例程序,并希望删除与图像中发现的正方形的中值面积相差太大的所有正方形。

最后在 cleanSquares 中,我做了一个向后循环并检查每个正方形是否相差太大,在这种情况下,我想从正方形向量中删除该向量。我做错了什么?

【问题讨论】:

    标签: c++ vector opencv erase


    【解决方案1】:

    void cleanSquares( const vector&lt;vector&lt;Point&gt; &gt;&amp; squares )

    squares 是一个常量引用,你不能从中删除。根据您的最终意图删除 const 或按值取值。

    如果您觉得舒服的话,我还建议您使用 erase(remove_if( ... )) 习惯用法。

    【讨论】:

    • 当然,这成功了。感谢您的快速答复! :-)
    • 我还必须将 for 循环更改为 for( size_t i = size - 1; i --> 0; ) 以使循环正确倒数,此处解释 stackoverflow.com/questions/3623263/…
    • 如果您使用erase(remove_if( ... )) 习惯用法,您就不会遇到这个问题,您甚至不必编写循环。考虑在未来研究它。
    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多