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

OpenCV(cv::dnn::blobFromImage())

时间:2024-10-30 10:44:26浏览次数:3  
标签:模型 dnn OpenCV blob 图像 格式 cv 输入

目录



cv::dnn::blobFromImage() 是 OpenCV 的 DNN 模块中的一个函数,用于将输入图像转换为深度学习模型可接受的输入格式(称为“blob”)。它通常在使用预训练的深度学习模型进行推理时,用于图像预处理,将图像格式转换为模型所需的四维张量格式。



1. 函数定义

cv::Mat cv::dnn::blobFromImage(
    InputArray image,                    // 输入图像
    double scalefactor = 1.0,            // 缩放因子
    Size size = Size(),                  // 图像大小
    Scalar mean = Scalar(),              // 均值,用于去均值化
    bool swapRB = false,                 // 交换红蓝通道
    bool crop = false,                   // 是否裁剪
    int ddepth = CV_32F                  // 输出 blob 的深度
);

参数详解:

  1. image:输入图像(cv::Mat 类型),通常为 BGR 格式。如果是多张图像组成的 batch,则输入为包含多张图像的向量。
  2. scalefactor:缩放因子,所有像素值将乘以该因子。通常用于将像素值标准化为模型所需的范围。例如,如果像素值范围为 [0, 255],并希望将其缩放到 [0, 1],则 scalefactor 应设置为 1/255.0
  3. size:目标尺寸,即将图像调整到指定的宽高。多数深度学习模型要求输入图像具有特定的尺寸(如 224x224),因此该参数用于调整输入图像大小。
  4. mean:均值,用于去均值化。每个通道的像素值减去对应的均值。例如,某些模型使用 (mean_R, mean_G, mean_B) = (104, 117, 123) 来去均值化,使图像更加符合训练时的统计分布。
  5. swapRB:交换红蓝通道,默认值为 false。OpenCV 使用 BGR 格式读取图像,而大部分深度学习模型使用 RGB 格式,因此此参数设为 true 可以交换通道,使图像符合 RGB 顺序。
  6. crop:是否裁剪图像。设为 true 时,将按中心裁剪图像,确保宽高比不变,并符合 size 指定的尺寸。
  7. ddepth:输出 blob 的深度,默认值为 CV_32F(单精度浮点数)。可以根据模型需要选择不同的深度。

返回值:

cv::dnn::blobFromImage() 返回一个 cv::Mat 类型的四维张量,称为 “blob”。返回的张量具有以下形状:

  • 形状:(N, C, H, W)
    • N:样本数(batch size),通常为 1
    • C:通道数(color channels),通常为 3BGR)。
    • H:高度。
    • W:宽度。


2. 示例代码

以下示例展示了如何使用 cv::dnn::blobFromImage() 将图像转换为 blob,并将其传递给一个深度学习模型。

#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
using namespace cv;
using namespace cv::dnn;

int main() {
    // 读取图像
    Mat image = imread("image.jpg");

    // 转换为 blob
    Mat blob = blobFromImage(image, 1.0/255.0, Size(224, 224), Scalar(0, 0, 0), true, false);

    // 加载 DNN 模型
    Net net = readNetFromONNX("model.onnx");

    // 将 blob 设置为网络的输入
    net.setInput(blob);

    // 推理
    Mat output = net.forward();

    // 处理推理结果
    // ...

    return 0;
}


3. 应用场景

  1. 图像标准化:通过去均值和缩放,将图像归一化为模型所需的分布。
  2. 通道交换:在使用 OpenCV 读取的 BGR 格式图像时,转换为 RGB 顺序以兼容大多数模型。
  3. 批量输入:支持多个图像的批量转换,将多个图像一次性转换为模型输入格式。


4. 注意事项

  • 尺寸匹配:确保 size 与模型的输入尺寸一致,否则可能导致推理错误。
  • 通道顺序:默认 swapRB=false,适用于 BGR 格式图像。如果模型需要 RGB 格式输入,请将 swapRB=true
  • 输出数据类型blob 默认使用浮点格式(CV_32F),如果模型需要其他类型的数据,需在 ddepth 参数中指定。


标签:模型,dnn,OpenCV,blob,图像,格式,cv,输入
From: https://www.cnblogs.com/keye/p/18515346

相关文章

  • OpenCV(cv::copyMakeBorder())
    目录1.函数定义2.示例代码3.应用场景4.注意事项cv::copyMakeBorder()是OpenCV中用于给图像添加边框的函数,可以将指定宽度和类型的边框添加到图像的四周。这种操作在图像处理和计算机视觉任务中非常常见,比如在卷积运算中,通过填充边框来避免边界效应影响结果。1.函数......
  • XCVU13P板卡设计原理图:509-基于XCVU13P的4路QSFP28光纤PCIeX16收发卡
    基于XCVU13P的4路QSFP28光纤PCIeX16收发卡 一、板卡概述     基于XCVU13P的4路QSFP28光纤PCIeX16收发卡。该板卡要求符合PCIe3.0标准,包含一片XCVU13P-2FLGA2014I、4组64-bit/8GBDDR4;4路QSFP284X光纤,每路光纤支持4X25Gbps,双向;支持32路IO。板卡工作温度范围0到60℃,板......
  • Data-Free,多目标域适应合并方案,简单又有效 | ECCV'24
    来源:晓飞的算法工程笔记公众号,转载请注明出处论文:Training-FreeModelMergingforMulti-targetDomainAdaptation论文地址:https://arxiv.org/abs/2407.13771论文代码:https://air-discover.github.io/ModelMerging创新点对域适应的场景解析模型中的模式连通性进......
  • Python从0到100(六十八):Python OpenCV-图像边缘检测及图像融合
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • javaCV图片OCR文字识别
    springboot项目pom文件中添加以下依赖 1<dependency>2<groupId>org.bytedeco</groupId>3<artifactId>javacv-platform</artifactId>4<version>1.5.5</version>5</depend......
  • SpringBoot汽车销售管理系统1cv5c--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表销售员,客户,销售订单,品牌,车系,汽车库存,汽车入库,财务报表开题报告内容一、课题背景与意义随着汽车市场的不断扩大,汽车销售管理变得日益复杂。为了提高销售......
  • NVR设备ONVIF接入平台EasyCVR视频分析设备平台视频质量诊断技术与能力
    视频诊断技术是一种智能化的视频故障分析与预警系统,NVR设备ONVIF接入平台EasyCVR通过对前端设备传回的码流进行解码以及图像质量评估,对视频图像中存在的质量问题进行智能分析、判断和预警。这项技术在安防监控领域尤为重要,因为它能够确保监控系统的正常运行,提高视频监控的可靠性和......
  • 萤石设备视频接入平台EasyCVR私有化部署视频平台高速公路视频上云的高效解决方案
    经济的迅猛发展带来了高速公路使用频率的激增,其封闭、立交和高速的特性变得更加显著。然而,传统的人工巡查方式已不足以应对当前高速公路的监控挑战,监控盲点和响应速度慢成为突出问题。比如,非法占用紧急车道的情况屡见不鲜,却因缺乏即时监控和确凿证据,给执法带来了不小的挑战。在许......
  • vins-fusion gpu, docker, opencv4.5.4(cuda) 复现
    代码:https://gitee.com/zheng-yongjie/vins-fusion-gpu-cv4?skip_mobile=true硬件:jetsonxaviernx,系统20.04nvcc-V可查看cuda版本本文在docker里面复现1.opencvcuda安装root@ubuntu:~#pwd/rootwget-Oopencv-4.5.4.ziphttps://github.com/opencv/opencv/archi......
  • SpringBoot汽车销售管理系统1cv5c 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:销售员,客户,销售订单,品牌,车系,汽车库存,汽车入库,财务报表开题报告内容一、研究背景随着汽车市场的不断扩大和竞争的日益激烈,汽车销售管理系统的需......