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

OpenCV库学习之NMSBoxes函数

OpenCV库学习之NMSBoxes函数

一、简介

cv2.dnn.NMSBoxes 是 OpenCV 库中的一个函数,用于在目标检测任务中执行非极大值抑制(Non-Maximum Suppression, NMS)。这个函数通过移除多余的边界框来保留最佳的检测结果。在目标检测算法(如 SSD、YOLO 等)中,通常会预测出多个重叠的边界框,NMS 可以帮助筛选出最佳的边界框。

二、语法和参数

语法:

cv2.dnn.NMSBoxes(boxes, scores, score_threshold, nms_threshold, top_k=0, eta=1.0)

参数:

  • boxes: 边界框的列表,每个边界框是一个四元组 (x1, y1, x2, y2),表示边界框的左上角和右下角的坐标。
  • scores: 每个边界框对应的置信度分数列表。
  • score_threshold: 置信度的阈值,低于此阈值的边界框将被忽略。
  • nms_threshold: NMS 的阈值,用于决定是否抑制某个边界框。
  • top_k: 可选参数,指定要保留的最大边界框数量,如果为 0,则忽略此参数。
  • eta: 可选参数,表示在处理 top_k 时的严格性,通常设置为 1.0。

返回值:
返回一个列表,包含通过 NMS 筛选后保留的边界框的索引。

三、实例

3.1 基本的 NMS 操作
  • 代码:
import cv2

# 假设有一组边界框和对应的置信度分数
boxes = [(x1, y1, x2, y2) for x1, y1, x2, y2 in [(100, 100, 200, 200), (150, 150, 250, 250)]]
scores = [0.9, 0.8]

# 应用 NMS
indices = cv2.dnn.NMSBoxes(boxes, scores, score_threshold=0.5, nms_threshold=0.3)
print("Indices of the remaining boxes:", indices)
  • 输出:
Indices of the remaining boxes: [0 1]
3.2 指定 top_k 和 eta 参数
  • 代码:
import cv2

# 假设有一组边界框和对应的置信度分数
boxes = [(x1, y1, x2, y2) for x1, y1, x2, y2 in [(100, 100, 200, 200), (150, 150, 250, 250), (300, 300, 400, 400)]]
scores = [0.9, 0.8, 0.7]

# 应用 NMS,同时指定 top_k 和 eta 参数
indices = cv2.dnn.NMSBoxes(boxes, scores, score_threshold=0.5, nms_threshold=0.3, top_k=2, eta=1.0)
print("Indices of the remaining boxes:", indices)
  • 输出:
Indices of the remaining boxes: [0 1]

四、注意事项

  1. cv2.dnn.NMSBoxes 函数是 OpenCV 4.x 版本中新增的,如果你使用的是 OpenCV 3.x 或更早版本,这个函数不可用。
  2. 边界框坐标通常是整数,表示图像中的位置。
  3. score_thresholdnms_threshold 是两个重要的参数,需要根据实际情况进行调整,以达到最佳的检测效果。
  4. top_k 参数可以用来进一步限制保留的边界框数量,但要注意,即使设置了 top_k,最终保留的边界框数量也可能少于 top_k,因为低于 score_threshold 的边界框会被忽略。
  5. 在使用 NMS 时,通常需要先对边界框和置信度分数进行排序,以确保高置信度的边界框优先被处理。

http://www.kler.cn/a/313408.html

相关文章:

  • 【vue2.0入门】vue单文件组件
  • Springboot整合Prometheus+grafana实现系统监控
  • 什么是两化融合
  • OSS文件上传
  • 2024年11月10日系统架构设计师考试题目回顾
  • IDEA 如何手动创建spring boot工程
  • ubuntu如何进行自动mount硬盘(简易法)
  • Ansible——Playbook基本功能???
  • TortoiseSVN图标不显示的解决
  • 网页交互模拟:模拟用户输入、点击、选择、滚动等交互操作
  • 实习期间git的分枝管理以及最常用的命令
  • PyCharm 安装教程
  • C#+EmguCV合并视频文件
  • Qt Linguist 短语书批量导入翻译.ts导入.qph
  • kubernetes技术详解,带你深入了解k8s
  • 汽车应用生态系统的飞跃
  • Docker 华为云镜像加速器配置
  • Imagen架构详解:理解其背后的技术与创新
  • 大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同
  • 锐尔15注册机 锐尔文档扫描影像处理系统15功能介绍
  • ChatGPT 4o 使用指南 (9月更新)
  • 【OceanBase诊断调优】—— 断连接问题根因分析
  • MongoDB在大数据场景应用
  • 前端动画库大比拼:为何选择Velocity.js
  • 【STM32】独立看门狗(IWDG)原理详解及编程实践(下)
  • 记录一次fs配置导致串线的问题