OpenCV库学习之NMSBoxes函数

news2024/9/20 16:20:44

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.coloradmin.cn/o/2149390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java反序列化漏洞分析

相关学习资料# http://www.freebuf.com/vuls/90840.htmlhttps://security.tencent.com/index.php/blog/msg/97http://www.tuicool.com/articles/ZvMbInehttp://www.freebuf.com/vuls/86566.htmlhttp://sec.chinabyte.com/435/13618435.shtmlhttp://www.myhack58.com/Article/ht…

【Qt笔记】QTabWidget控件详解

目录 引言 一、基本功能 二、核心属性 2.1 标签页管理 2.2 标签位置 2.3 标签形状 2.4 标签可关闭性 2.5 标签可移动性 三、信号与槽 四、高级功能 4.1 动态添加和删除标签页 4.2 自定义标签页的关闭按钮行为 4.3 标签页的上下文菜单 五、样式设置 六、应用示例…

git使用“保姆级”教程1——简介及配置项设置

一、git介绍 Git是一个开源的分布式版本控制系统,用于:敏捷高效地处理任何或小或大的项目。Git 是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。版本控制: 版本控制(Revision control&#xff…

鸿蒙环境服务端签名直传文件到OSS

本文介绍如何在鸿蒙环境下将文件上传到OSS。 背景信息 鸿蒙环境是当下比较流行的操作环境,与服务端签名直传的原理类似,鸿蒙环境上传文件到OSS是利用OSS提供的PutObject接口来实现文件上传到OSS。关于PutObject的详细介绍,请参见PutObject。…

大厂常问的MySQL事务隔离到底怎么回答

什么是事务 事务就是一组原子性的SQL查询,或者说一个独立的工作单元。事务内的语句,要么全部执行成功,要么全部执行失败。 关于事务银行系统的应用是解释事务必要性的一个经典例子。 假设一个银行的数据库有两张表:支票表&#x…

OpenAI o1大模型:提示词工程已死

OpenAI 最近发布了最新大模型 o1,通过强化学习训练来执行复杂的推理任务,o1 在多项基准测试中展现了博士级别的推理能力,甚至在某些情况下可以与人类专家相媲美。 当你使用 o1 的时候,会发现文档中多了一项提示词建议。 翻译一下&…

OBB-最小外接矩形包围框-原理-代码实现

前言 定义:OBB是相对于物体方向对齐的包围盒,不再局限于坐标轴对齐,因此包围点云时更加紧密。优点:能够更好地贴合物体形状,减少空白区域。缺点:计算较为复杂,需要计算物体的主方向&#xff0c…

二叉树的遍历【C++】

对于二叉树系列的题,必须要会遍历二叉树。 遍历的有:深度优先:前序、中序、后序,广度优先:层序遍历 什么序是指处理根节点在哪个位置,比如前序是指处理节点顺序:根左右。 接下来要说明的是&…

深入浅出Docker

1. Docker引擎 Docker引擎是用来运行和管理容器的核心软件。通常人们会简单的将其指代为Docker或Docker平台。 基于开放容器计划(OCI)相关的标准要求,Docker引擎采用了模块化的设计原则,其组件是可替换的。 Docker引擎由如下主…

从理论到实践:全面指导企业实现数字化转型的战略路径

全球企业数字化转型的必然性 在全球范围内,数字化转型成为了企业战略中的核心命题。随着云计算、大数据、人工智能等新兴技术的快速发展,企业的运营模式、管理体系及客户体验正在发生深刻的变革。数字技术不仅为企业带来了新的商业机会,还使…

【Elasticsearch】-图片向量化存储

需要结合深度学习模型 1、pom依赖 注意结尾的webp-imageio 包&#xff0c;用于解决ImageIO.read读取部分图片返回为null的问题 <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.7.0-0</versio…

【2025】中医药健康管理小程序(安卓原生开发+用户+管理员)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

海报制作哪个软件好?这些在线工具不容错过

国庆节的脚步越来越近&#xff0c;不少公司正计划利用这个时机开展一些特别的庆典活动。 在这些活动中&#xff0c;海报作为一种传统的宣传方式&#xff0c;仍然是不可或缺的。但在制作海报时&#xff0c;我们可能会遇到创意瓶颈、时间限制或者预算约束等问题。 幸运的是&…

高棉语翻译神器上线!中柬互译,OCR识别,语音翻译一应俱全,《柬埔寨语翻译通》App

全新的高棉语翻译神器已经正式上架&#xff01; 无论你是安卓还是iOS用户&#xff0c;现在都可以轻松开始使用&#xff0c;开启你的翻译之旅&#xff01; 这款应用不仅仅是一个简单的翻译工具&#xff0c;它还支持中文与高棉语的双向翻译。翻译结果可以语音播放&#xff0c;翻…

AI服务器是什么?为什么要用AI服务器?

AI服务器的定义 AI服务器是一种专门为人工智能应用设计的服务器&#xff0c;它采用异构形式的硬件架构&#xff0c;通常搭载GPU、FPGA、ASIC等加速芯片&#xff0c;利用CPU与加速芯片的组合来满足高吞吐量互联的需求&#xff0c;为自然语言处理、计算机视觉、机器学习等人工智…

企业微信-前往服务商后台页面对接解决方案

序 我会告诉你在哪里点我会告诉你在哪里配置点下去他只返回auth_code的&#xff0c;我怎么登录 正文 他是在这个位置 是这样&#xff0c;应用授权安装第三方应用后&#xff0c;企业微信&#xff08;管理员角色&#xff09;是可以从pc端企业后台点第三方应用的。 如果我没记…

【余弦相似度】

余弦相似度 又称为余弦距离&#xff0c;利用两个向量之间的夹角的余弦值来衡量两个向量的余弦相似度&#xff0c;两个向量夹角越小&#xff0c;余弦值越接近1。 向量模&#xff08;向量长度&#xff09;计算方法&#xff1a; n维向量的相似度计算&#xff1a; 余弦相似度的取…

黑盒测试 | 挖掘.NET程序中的反序列化漏洞

通过不安全反序列化漏洞远程执行代码 img 今天&#xff0c;我将回顾 OWASP 的十大漏洞之一&#xff1a;不安全反序列化&#xff0c;重点是 .NET 应用程序上反序列化漏洞的利用。 &#x1f4dd;$ _序列化_与_反序列化 序列化是将数据对象转换为字节流的过程&#xff0c;字节流…

Entity更新坐标不闪烁需采用setCallbackPositions方法赋值

问题描述&#xff1a; 1.new mars3d.graphic.PolygonEntity({在更新点位高度模拟水面上身的时候&#xff0c;会存在闪烁 2.当把addDemoGraphic4添加到图层后&#xff0c;addDemoGraphic1水位变化不闪烁&#xff0c;把addDemoGraphic4注释后&#xff0c;addDemoGraphic1闪烁。…

UI自动化测试的边界怎么定义?

标题&#xff1a;定义UI自动化测试的边界&#xff1a;从0到1的详细指南 引言&#xff1a; UI自动化测试是现代软件开发过程中至关重要的一环。为了确保自动化测试的有效性和准确性&#xff0c;我们需要明确定义测试的边界。本文将从0到1为您提供一篇详细且规范的指南&#xf…