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

这篇具有很好参考价值的文章主要介绍了【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

nmsboxes,C、C++日常记录,opencv,dnn,人工智能文章来源地址https://www.toymoban.com/news/detail-762406.html

到了这里,关于【Opencv】cv::dnn::NMSBoxes()函数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python-opencv-cv2.inRange函数()函数详解

    cv2.inRange( hsv, lower_red, upper_red ) 参数 描述 hsv 指的是原图 lower_red 指的是图像中低于这个lower_red的值,图像值变为0(黑) upper_red 指的是图像中高于这个upper_red的值,图像值变为0(黑) lower_red~upper_red 在lower_red~upper_red之间的值变成255(白)

    2024年04月09日
    浏览(26)
  • 画圆操作——OpenCV中cv2.circle函数详解

    画圆操作——OpenCV中cv2.circle函数详解 在计算机视觉领域,图像处理是最基础的操作,而画圆操作又是其中不可或缺的一部分。在OpenCV中,cv2.circle函数可以实现画圆的功能。 下面是cv2.circle函数的基本格式: 其中各参数含义如下: img:要进行画圆操作的图片。 center:圆心坐

    2024年02月09日
    浏览(32)
  • 【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解

    在OpenCV图像加法cv2.add函数详解详细介绍了图像的加法运算。 除了这种加法外,OpenCV还提供了带权重的加法,即两副图像的像素通道值相加时各自按一定的权重比例取值来相加。 假设有2个图像矩阵src1和src2,在两个图像融合时,各自的权重分别为alpha和beta,则二者融合后的目

    2024年02月15日
    浏览(55)
  • python-opencv-cv2.threshold()二值化函数详解

    cv2.threshold( src, thresh, maxval, type[, dst] ) → retval, dst 参数 描述 src 表示的是图片源 thresh 表示的是阈值(起始值) maxval 表示的是最大值 type 表示的是这里划分的时候使用的是方法选择参数 常用值为0(cv2.THRESH_BINARY) 第四个是一个方法选择参数,常用的有: • cv2.THRESH_BINARY(黑

    2024年02月15日
    浏览(28)
  • 详解cv2.addWeighted函数【使用 OpenCV 添加(混合)两个图像-Python版本】

    有的时候我们需要将两张图片在alpha通道进行混合,比如深度学习数据集增强方式MixUp。OpenCV的 addWeighted 提供了相关操作,此篇博客将详细介绍这个函数,并给出代码示例。🚀🚀 o u t p u t I m g = s a t u r a t e ( α ∗ i n p u t I m g 1 + β ∗ i n p u t I m g 2 + γ ) rm outputImg=saturate( al

    2024年02月06日
    浏览(54)
  • 详解OpenCV的函数cv::add(),并附各种情况的示例代码和运行结果

    函数cv::add()用于实现两个Mat类矩阵相加,或者矩阵和标量相加。 函数add()的原型如下: 前四个参数没什么好说的,这里说下最后一个参数dtype,它用于设置输出矩阵的数据类型,具体情况如下: The input arrays and the output array can all have the same or different depths. For example, you can ad

    2023年04月08日
    浏览(43)
  • cv2.error: OpenCV(4.8.1) /io/opencv/modules/dnn/src/net_impl.cpp:279: error: (-204:Requested object

    使用stable diffusion webui进行图片预处理(preporcess images)的时候,当勾选了自动聚焦裁减(Auto focal point crop)的时候发生了错误: 是由于使用了opencv库进行聚焦的时候报错,原因是opencv版本问题,降低opencv版本即可解决:

    2024年02月07日
    浏览(32)
  • 【Python】【Opencv】形态学操作cv2.morphologyEx()函数详解和示例,实现腐蚀、膨胀、闭和开等运算

    常用的形态学操作如腐蚀、膨胀、开运算、闭运算等,可以帮助我们解决一下图像不连接或消除图像中某些不想要的连接,对于图像处理使用方便,效果明显。本文通过示例对这些功能和效果进行演示,以帮助大家理解和使用。 cv2.morphologyEx 是 OpenCV 中的一个函数,用于执行

    2024年02月22日
    浏览(34)
  • 【OpenCV4】计算对称矩阵特征值和特征向量 cv::eigen() 用法详解和代码示例(c++)

    解析: src:输入矩阵,只能是 CV_32FC1 或 CV_64FC1 类型的方阵(即矩阵转置后还是自己) eigenvalues:输出的特征值组成的向量,数据类型同输入矩阵,排列从大到小 eigenvectors:输出的特征向量组成的矩阵,数据类型同输入矩阵,每一行是一个特征向量,对应相应位置的特征值

    2024年02月13日
    浏览(35)
  • OpenCV DNN C++ 使用 YOLO 模型推理

    YOLO(You Only Look Once)是一种流行的目标检测算法,因其速度快和准确度高而被广泛应用。OpenCV 的 DNN(Deep Neural Networks)模块为我们提供了一个简单易用的 API,用于加载和运行预先训练的深度学习模型。本文将详细介绍如何使用 OpenCV 的 DNN 模块来进行 YOLOv5 的目标检测。 确保

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包