gpt4 book ai didi

C++ vector::erase 问题与 OpenCV 代码

转载 作者:行者123 更新时间:2023-11-28 08:16:59 24 4
gpt4 key购买 nike

我的部分 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 中我做了一个反向循环并检查每个正方形是否差异太大,在这种情况下我想从正方形 vector 中删除该 vector 。我做错了什么?

最佳答案

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

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

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

关于C++ vector::erase 问题与 OpenCV 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7408187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com