C ++ vector :: стереть проблемы с кодом OpenCV - PullRequest
0 голосов
/ 14 сентября 2011

У меня проблемы с частью моего кода 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.Пример программы cpp и я хочу удалить все квадраты, которые слишком сильно отличаются от средней площади квадратов, найденных на изображении.

Последнее в cleanSquares Я делаю цикл в обратном направлении и проверяю, отличается ли каждый квадрат слишком сильно, и в этомЯ хочу стереть этот вектор из вектора квадратов.Что я делаю не так?

1 Ответ

1 голос
/ 14 сентября 2011

void cleanSquares( const vector<vector<Point> >& squares )

squares является константной ссылкой, вы не можете стереть ее.Отбросьте const или возьмите по значению в соответствии с вашими конечными намерениями.

Я также рекомендовал бы использовать идиому erase (remove_if (...)), если вам это удобно.

...