c++ - 从 vector 中检索两个最大值

标签 c++ opencv

我已经声明了一个 vector ,它存储给定帧中所有边界框的区域。然后我使用从头到尾迭代这个 vector 来检索值。然后我按升序对这些值进行排序(最低 -> 最高)。

这是我使用的代码:

 double area = contourArea(boundingBoxArea);
    list_area.push_back(area);
    sort(list_area.begin(), list_area.end());
    vector<double>::const_iterator area_iter;

    int i = 0;
    for(area_iter = list_area.begin(); area_iter != list_area.end(); area_iter++)
    {
        i++;
        cout<<"Iterator " <<i<< " size is : " <<*area_iter<<endl;
    }

我的问题是,我只对数字集中的最后两个值(2 个最高值)感兴趣,但我无法真正理解我应该如何着手实现我的目标。

这里有人对我的问题有建议或解决方案吗...?

问候

最佳答案

遍历列表,每次将新值与旧的最大值进行比较。如果新值更高,则将其存储为最高值,并使用第二个变量来保持先前的最高值。

类似这样的东西 .. 在语法上可能不正确,但在这里是:-

   int iCurrentHighest = 0;
    int previousHighest = 0;
    for(area_iter = list_area.begin(); area_iter != list_area.end(); area_iter++)
        {
            if(*area_iter>iCurrentHighest)
            {
              previousHighest  = iCurrentHighest;
              iCurrentHighest = *area_iter;

            }
        else
            {
            if ((*area_iter<iCurrentHighest) && (*area_iter>previousHighest))
                {
                  previousHighest = *area_iter;
                }  
            }

        }

关于c++ - 从 vector 中检索两个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036392/

相关文章:

c# - 在Emgu + OpenCV中处理带有多个子图像的图像的最佳方法?

c++ - 在 opencv2 和 opencv3 中使用 findContours 时的输出差异

c++ - 如何格式化输出或显示?

c++ - 为什么这不会给出编译错误?

C++检查utf8字符串是否包含指定字符

opencv - 内部细化

c++ - OpenCV Mat 中的动态内存释放错误

c++ - TCS MockVita 2019 第二轮问题 : Hop Game

c++ - 如何在谷歌测试中读取 spdlog 输出

opencv - cvBlobsLib 查找重叠的 blob