我的部分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中我做了一个向后循环并检查每个方块是否有太大差异,在这种情况下我想从方块向量中删除该向量。我做错了什么?
答案 0 :(得分:1)
void cleanSquares( const vector<vector<Point> >& squares )
squares
是一个const引用,你无法从中删除。根据你的最终意图,删除const,或者按值计算。
我还建议你使用擦除(remove_if(...))习语,如果你觉得舒服的话。