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

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.mrgr.cn/news/30987.html

相关文章:

  • 知名开源项目官宣停更,太痛了!
  • Flutter 的 Widget 概述与常用 Widgets 与鸿蒙 Next 的对比
  • 在线项目管理系统有哪些选择?2024年9款推荐
  • Unity资源打包Addressable AA包
  • 世界坐标和Local坐标的区分
  • CKA认证 | Day1 k8s核心概念与集群搭建
  • 论文解读《COMMA: Co-articulated Multi-Modal Learning》
  • 第三篇 第13篇 建设项目总投资构成及计算
  • 重拳出击!又一批外汇欺诈平台浮出水面
  • 【Java算法】二叉树的深搜
  • Multisim放置运放的时候让选择ABCD
  • Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
  • SourceTree保姆级教程:(解决冲突)
  • enum are in unname module of loader ‘app‘
  • 华为大咖说 | 新时代,智能电动车车联网有哪些发展趋势?(上篇)
  • 机房动力环境监控系统组成
  • 如何保养净水器
  • 从0开始的linux(4)——权限
  • JavaWeb学习
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-快速体验(十三)
  • 多模态文档理解:一文读懂mPLUG-DocOwl系列模型
  • 在基准测试和规划测试中选Flat还是Ramp-up?
  • 图像亮度均衡算法
  • 第二证券:“产业+科技” 中国并购重组市场持续升温
  • 非标工业模型评审不再难,3D一览通助力高效协同
  • 設置Android設備全局代理