首页 > 其他分享 >OpenCV(cv::dnn::NMSBoxes())

OpenCV(cv::dnn::NMSBoxes())

时间:2024-10-31 13:10:28浏览次数:8  
标签:得分 NMS dnn OpenCV threshold cv NMSBoxes

目录



cv::dnn::NMSBoxes() 是 OpenCV DNN 模块中用于非极大值抑制(Non-Maximum Suppression, NMS)的函数,常用于目标检测任务中,以去除重叠度较高的框,保留检测得分最高的框。

cv::dnn::NMSBoxes() 主要在检测过程中对多个候选框进行处理,通过限制重叠的框数量来提升结果质量。



1. 函数定义

void cv::dnn::NMSBoxes(
    const std::vector<cv::Rect>& bboxes, 
    const std::vector<float>& scores, 
    float score_threshold, 
    float nms_threshold, 
    std::vector<int>& indices, 
    float eta = 1.0f, 
    int top_k = 0
);

参数详解:

  1. bboxes:存储待处理的边界框(bounding boxes),每个 cv::Rect 元素表示一个矩形框。格式为 (x, y, width, height),代表框的左上角坐标和宽高。

  2. scores:与每个边界框对应的置信得分(confidence scores)。一般是模型对每个候选框检测出某一目标的置信度。

  3. score_threshold:得分阈值。低于该值的框将被直接过滤掉,不会参与 NMS 处理。

  4. nms_threshold:NMS 的 IoU(Intersection over Union)阈值。用于确定哪些框是“相互重叠的”,即两个框的重叠率超过该阈值时会保留得分较高的框,抑制得分较低的框。

  5. indices:输出参数,用于存储最终保留的边界框的索引。处理后,仅保留 indices 中索引对应的框作为结果。

  6. eta (可选参数):一种调节 NMS 阈值的衰减因子,默认值为 1.0。在 eta < 1 时会在每次抑制操作中逐步降低 nms_threshold。通常该参数不常用。

  7. top_k (可选参数):限制参与 NMS 处理的最高得分框数量。top_k > 0 时,仅对得分前 top_k 的框应用 NMS。



2. 函数工作流程

  1. 过滤低分框:首先过滤掉置信得分低于 score_threshold 的框,减少参与 NMS 计算的候选框数量。
  2. 排序:对剩下的边界框按得分降序排序。
  3. 迭代抑制:
    • 从最高分的框开始,计算它与其他框的 IoU 值。
    • 如果 IoU 超过 nms_threshold,则将该框从候选框中删除(认为该框可能表示同一目标)。
  4. 输出结果:将剩余框的索引存储在 indices 中作为最终结果。


3. 示例代码

以下示例展示了如何在目标检测过程中使用 cv::dnn::NMSBoxes() 来过滤重叠框:

#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>

int main() {
    // 示例框和得分
    std::vector<cv::Rect> bboxes = { {10, 10, 50, 50}, {15, 15, 50, 50}, {100, 100, 60, 60} };
    std::vector<float> scores = { 0.9, 0.85, 0.7 };

    // 设置阈值
    float score_threshold = 0.5;
    float nms_threshold = 0.3;

    // 存储保留的框索引
    std::vector<int> indices;

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

    // 输出结果
    for (int idx : indices) {
        std::cout << "保留框的索引:" << idx << " 位置:" << bboxes[idx] << std::endl;
    }

    return 0;
}


4. 应用场景

在目标检测中,通过 cv::dnn::NMSBoxes() 可以消除冗余检测框,仅保留置信度高的框。例如在 YOLO、SSD 等模型的后处理阶段,可使用该函数来抑制相互重叠的检测框,提升检测结果的质量。



5. 注意事项

  • nms_threshold 的选择非常关键,过低的阈值会抑制过多的框,导致漏检;过高的阈值则可能保留过多的框,增加重复检测。
  • cv::dnn::NMSBoxes() 仅支持矩形框。如果是非矩形框或多种类型的检测任务,需在调用前转换为矩形框。


标签:得分,NMS,dnn,OpenCV,threshold,cv,NMSBoxes
From: https://www.cnblogs.com/keye/p/18517430

相关文章

  • NVR设备ONVIF接入平台EasyCVR国标GB28181视频平台智能视频质量检测:自动化技术的革命性
    视频质量诊断技术是一种基于图像和视频处理的前沿技术,旨在评估和分析视频的质量,发现潜在问题并提供改进建议。该技术通过智能化的图像分析算法,对前端设备传回的视频流进行实时监测和诊断,确保视频监控系统能够持续提供高质量的监控画面。一、EasyCVR平台支持视频质量诊断NVR设备O......
  • 萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?
    现代农业的迅速发展中,集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR,作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案,为农业监控系统的建设提供了坚实的技术支持。该平台支持包括GB28181国家标......
  • OpenCV(cv::Mat::colRange())
    目录1.函数定义2.功能3.代码示例3.1选择第1列到第3列(列索引从0开始)3.2使用Range参数4.注意事项5.常见用途cv::Mat::colRange()是OpenCV中的一个函数,用于在矩阵中选择指定的列范围。这对于图像或数据矩阵处理时需要选择特定列的情况非常有用。1.函数定义colRan......
  • (ICCV2023)多尺度空间特征提取模块,有效涨点,即插即用
    题目:SAFMN:Spatially-AdaptiveFeatureModulationforEfficientImageSuper-Resolution期刊:CVPR(ConferenceonComputerVisionandPatternRecognition)GitHub地址:https://github.com/sunny2109/SAFMN年份:2023作者单位:TheChineseUniversityofHongKong(CUHK)......
  • OpenCV | 基于最细长轮廓自动校正旋转图片
    点击查看代码importcv2importnumpyasnpdefpreprocess_image(image):#转换为灰度图像gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#高斯模糊去噪blurred=cv2.GaussianBlur(gray,(33,33),0)#自适应阈值二值化binary=cv2.a......
  • 使用 OpenCV 进行视频帧操作
    视频帧的基本操作是视频处理的基础,构建了图像分析和计算机视觉等高级应用的技术前提。通过OpenCV库,视频处理从视频加载、帧读取到窗口显示与帧保存的流程逐步展开,实现了对视频信息的逐帧获取和操作。在此基础上,引入了灰度转换、模糊处理和边缘检测等技术,提升了视频帧的处理......
  • OpenCV与AI深度学习 | 实战 | YOLO11自定义数据集训练实现缺陷检测 (标注+训练+预测
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:实战|YOLO11自定义数据集训练实现缺陷检测(标注+训练+预测保姆级教程)导 读   本文将手把手教你用YOLO11训练自己的数据集并实现缺陷检测。安装环境YOLO11的介绍和使用这里不再赘......
  • 如何使用腾讯云CVM搭建出海电商平台
    引言:2024年已经有太多的企业开始了迈出国门,在出海贸易当中进行试水。但由于政策、文化等诸多方面的不同,更多的企业在做低成本的尝试,以避免一次性投入过大带来的损失。因此,越来越多的企业和个人,开始学习电商平台的相关知识,了解电商平台的相关业务,一些开发者们也开始通过了解开源......
  • 编译opencv 提示opencv_sfm links to target absl::log but not found解决办法
    先说解决办法,安装ceres库版本需要<2ErrorwhileconfiguringCMaketobuildwithcontribmodules在香橙派5上编译opencv+opencv_contrib我是先源码编译的ceres库(2.2版本的,查看include\version.h)在opencv\build目录下生成配置时,提示configdone,generatefailed!并报......
  • 宇视设备视频平台EasyCVR海康私有化视频平台实现全方位、全天候监控码头海岸线视频监
    在现代港口管理和海岸线监控领域,采用先进的视频监管技术已成为提高管理效率和确保安全的重要措施。宇视设备视频平台EasyCVR作为一种高效且智能的视频汇聚与监管系统,为码头及海岸线的视频监控提供了全面的解决方案。一、背景与需求港口码头作为货物和集装箱堆放及中转的重要机......