当前位置: 首页 > news >正文

【Opencv】cv::dnn::NMSBoxes()函数详解

本文通过原理和示例对cv::dnn::NMSBoxes()进行解读,帮助大家理解和使用。

原理

cv::dnn::NMSBoxes是OpenCV库中的一个函数,用于在目标检测中处理多个预测框。在目标检测中,模型可能会为同一个物体生成多个预测框,这时就需要通过非极大值抑制(Non-Maximum Suppression,NMS)来抑制冗余的预测框。
函数原型:

void cv::dnn::NMSBoxes(
    vector<cv::Rect> _boxes, vector<float> _scores, float _score_threshold, float _nms_threshold, vector<int> _indices)

参数详解:

_boxes: 输入边界框,一般为(x, y, w, h)格式的Rect格式的容器。
_scores: 输入边界框的预测分数,一般为每个边界框的类别概率或类别得分。
_score_threshold: 分数阈值,低于此阈值的边界框将被过滤掉。
_nms_threshold: 非极大值抑制阈值,用于决定哪些边界框之间的重叠度过高,需要抑制。
_indices: 输出参数,包含被选中的边界框的索引。

这个函数的作用是,首先根据_score_threshold过滤掉那些分数低于阈值的预测框。然后对剩余的预测框进行非极大值抑制,即对每个预测框,如果它的周围有高于它的预测框,则将该预测框抑制掉。最后,保留那些没有被抑制的预测框,这些预测框的索引保存在_indices中。

示例

#include <opencv2/opencv.hpp>
#include <vector>
#include <random>
#include <iostream>

int main() {
    // 随机生成一些边界框和置信度
    std::vector<cv::Rect> boxes = {
        {100, 100, 200, 200}, // (x, y, w, h)格式的边界框坐标
        {150, 150, 250, 250},
        {120, 120, 220, 220},
        {360, 200, 220, 220},
        {400, 220, 100, 300},
        {180, 120, 220, 300},
        // 可以继续添加更多的边界框...
    };
    std::vector<float> scores = { 0.9, 0.8, 0.7, 0.3, 0.5, 0.6}; // 每个边界框的置信度或类别概率

    // 设置NMS的参数
    static const float score_threshold = 0.5; // 分数阈值
    static const float nms_threshold = 0.4; // 非极大值抑制阈值
    std::vector<int> indices; // 存放被选中的边界框的索引

    // 执行NMS算法
    cv::dnn::NMSBoxes(boxes, scores, score_threshold, nms_threshold, indices);

    // 输出结果
    for (int i = 0; i < indices.size(); i++) {
        std::cout << "Selected box index: " << indices[i] << std::endl;
    }

    return 0;
}

输出结果为:

Selected box index: 0
Selected box index: 1

在这里插入图片描述

相关文章:

  • 华为云Ascend310服务器使用
  • JVM在线分析-监控工具(jps, jstat, jstatd)
  • 智慧城市建设解决方案分享【完整】
  • 为 Ubuntu 虚拟机构建 SSH 服务器
  • 2023年11月在线IDE流行度最新排名
  • 基于springboot的在线文档管理系统
  • 基于springboot实现桥牌计分管理系统项目【项目源码】计算机毕业设计
  • Android Studio里的C/C++返回: ld: error: undefined symbol
  • 【Go入门】面向对象
  • Vatee万腾科技决策力的未来展望:开创数字化创新的新高度
  • 音视频基础知识
  • Linux之基础开发工具gdb调试器的使用(三)
  • 数据存储_PGSQL
  • 【毕业论文】基于python爬虫对豆瓣影评分析系统的设计与实现
  • 【第七章】软件设计师 之 程序设计语言与语言程序处理程序基础
  • 写给新用户-Mac软件指南篇:让你的Mac更好用
  • 【Python】python读取,显示,保存图像的几种方法
  • 离线环境通过脚本实现服务器时钟同步(假同步)
  • mysql8安装和驱动jar包下载
  • 很多个pdf怎么合并在一起?
  • 见微知沪|科学既要勇攀高峰,又要放低身段
  • 玛丽亚·凯莉虹口连唱两夜,舞台绽放唤醒三代人青春记忆
  • 上海市第二十届青少年科技节启动:为期半年,推出百余项活动
  • 莫高义在第四届中国新闻发言人论坛开幕式上的致辞
  • 梅花奖在上海|湘剧《夫人如见》竞梅,长沙文旅来沪推广
  • 打击网络侵权盗版!四部门联合启动“剑网2025”专项行动