OpenCV的DNN模块
文章目录
- Mat的构造函数
- blobFromImage函数
- dnn::Net 的 forward()
Mat的构造函数
Mat::Mat()//无参数构造方法;
Mat::Mat(int rows, int cols, int type)//创建行数为 rows,列数为 col,类型为 type 的图像;
Mat::Mat(Size size, int type)//创建大小为 size,类型为 type 的图像;Mat::Mat(int rows, int cols, int type, const Scalar& s)//创建行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始化为值 s;Mat::Mat(Size size, int type, const Scalar& s)//创建大小为 size,类型为 type 的图像,并将所有元素初始化为值 s;Mat::Mat(const Mat& m)//将m赋值给新创建的对象,此处不会对图像数据进行复制,m和新对象共用图像数据,属于浅拷贝;Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)//创建行数为rows,列数为col,类型为type的图像,此构造函数不创建图像数据所需内存,而是直接使用data所指内存,图像的行步长由 step指定。Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)//创建大小为size,类型为type的图像,此构造函数不创建图像数据所需内存,而是直接使用data所指内存,图像的行步长由step指定。Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange)//创建的新图像为m的一部分,具体的范围由rowRange和colRange指定,此构造函数也不进行图像数据的复制操作,新图像与m共用图像数据;Mat::Mat(const Mat& m, const Rect& roi)// 创建的新图像为m的一部分,具体的范围roi指定,此构造函数也不进行图像数据的复制操作,新图像与m共用图像数据。
这些构造函数中,很多都涉及到类型type
type:CV_8UC1,CV_16SC1,…,CV_64FC4 等。8U 表示 8 位无符号整数,
16S 表示 16 位有符号整数,64F表示 64 位浮点数(即 double 类型);
C 后面的数表示通道数,例如 C1 表示一个通道的图像,C4 表示 4 个通道的图像,以此类推。如果你需要更多的通道数,需要用宏 CV_8UC(n),例如:
Mat M(3,2, CV_8UC(5));//创建行数为 3,列数为 2,通道数为 5 的图像。
blobFromImage函数
blobFromImage主要是用来对图片进行预处理。包含两个主要过程:
整体像素值减去平均值(mean)
通过缩放系数(scalefactor)对图片像素值进行缩放
Mat cv::dnn::blobFromImage(InputArray image, double scalefactor=1.0, //像素值进行一定的尺度缩放const Size& size = Size(),//神经网络在训练的时候要求输入的图片尺寸const Scalar& mean = Scalar(), bool swapRB = false, //openCV默认 BGR,传入的图片一般是RGBbool crop = false,// crop:输入图像大小与size不符的时候,是否需要裁剪int ddepth = CV_32F// ddepth:图像的数据类型,目前仅支持32F和8U)// image:这个就是我们将要输入神经网络进行处理或者分类的图片。/*
mean:需要将图片整体减去的平均值,
// 如果我们需要对RGB图片的三个通道分别减去不同的值,那么可以使用3组平均值,
// 如果只使用一组,那么就默认对三个通道减去一样的值。
// 减去平均值(mean):
// 为了消除同一场景下不同光照的图片,对我们最终的分类或者神经网络的影响,
// 我们常常对图片的R、G、B通道的像素求一个平均值,然后将每个像素值减去我们的平均值,
// 这样就可以得到像素之间的相对值,就可以排除光照的影响。
*///scalefactor:当我们将图片减去平均值之后,还可以对剩下的像素值进行一定的尺度缩放,它的默认值是1,如果希望减去平均像素之后的值,全部缩小一半,那么可以将scalefactor设为1/2。//size:这个参数是我们神经网络在训练的时候要求输入的图片尺寸。//swapRB:OpenCV中认为我们的图片通道顺序是BGR,但是我平均值假设的顺序是RGB,所以如果需要交换R和G,那么就要使swapRB=true
void cv::dnn::Net::setInput ( InputArray blob,// blob,就是上文中介绍的blobFromImage的返回值const String & name = "",// 这个name指的是inputlayer的名字。double scalefactor = 1.0,const Scalar & mean = Scalar() ) // scalefactor 和 mean 与blobFromImage中相同
dnn::Net 的 forward()
从网络开始层进行计算,前向传播到输出层
Mat cv::dnn::Net::forward(const String& outputName = String())// 这个函数只需要提供layer的name即可;// 函数返回一个Mat变量,返回值是指输入的layername 首次出现 的输出。// // 默认输出整个网络的运行结果layer { // layer层的例子 (googleNet输出层)name: "prob" //层名称type: "Softmax" //bottom: "loss3/classifier"top: "prob"}void cv::dnn::Net::forward(OutputArrayOfArrays outputBlobs,const String & outputName = String()) // 该函数的返回值是void,通过OutputArrayOfArrays类型提供计算结果,类型为blob// 这个outputName依然是layer的name,// outputBlobs不是 首次 layer的输出了,而是layername指定的layer的全部输出void cv::dnn::Net::forward(OutputArrayOfArrays outputBlobs,const std::vector<String> & outBlobNames)// 该函数返回值为void,// outBlobNames是需要提供输出的layer的name,类型为vector,也就是说可以提供多个layer的那么;// 它会将每个layer的 首次计算输出 放入outputBlobs。void cv::dnn::Net::forward(std::vector<std::vector<Mat>> & outputBlobs, const std::vector<String> & outBlobNames ) // 返回值为void;// 输入outBlobNames是vector类型,// outputBlobs是vector<std::vector<Mat>>类型;// 该函数可以输入多个layer的name;// 它会输出每个layer的全部输出到outputBlobs中。
第二个开始依次是:标签、置信度、目标位置的4个坐标信息[xmin ymin xmax ymax]
倒数第二维是识别的标签的数量,图中选择显示第4个标签的信息
OpenCV的DNN模块相关推荐
- 用opencv的dnn模块做yolov5目标检测
最近在微信公众号里看到多篇讲解yolov5在openvino部署做目标检测文章,但是没看到过用opencv的dnn模块做yolov5目标检测的.于是,我就想着编写一套用opencv的dnn模块做yol ...
- OpenCV之DNN模块,实现深度学习网络的推理加速
OpenCV是计算机视觉领域使用最为广泛的开源库,以功能全面使用方便著称.自3.3版本开始,OpenCV加入了对深度神经网络(DNN)推理运算的支持.在LiveVideoStack线上交流分享中英特尔 ...
- AI入门之神经网络(9)基于c++、opencv的dnn模块的视频手势识别
基于c++.opencv的dnn模块的手势识别 先看效果: 老规矩话不多,实现的方法步骤,细节全在我的代码注释里面,只你跟着注释写,相信你也写得出来的! #include <opencv2/dn ...
- OpenCV的dnn模块调用TesorFlow训练的MoblieNet模型
七月 上海| 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习 快速带你入门阅读全文> 正文共2073个字,2张图,预计阅读时间10分钟. 一.初得模型 那是一个月之前的事情了 ...
- python、C++ 中通过OpenCV的DNN模块使用YoloV4
目录 1 Python环境下调用 2 C++环境下调用(编写CMakeLists.txt文件) 2.1 OpenCV安装 2.2 程序编写 2.2.1 main.cpp 2.2.2 Detection ...
- 深度学习与OpenCV DNN模块:权威指南
计算机视觉领域自20世纪60年代末就已经存在.图像分类和目标检测是计算机视觉领域的一些最古老的问题,研究人员已经努力解决了几十年.使用神经网络和深度学习,我们已经达到了一个阶段,计算机可以开始真正地理 ...
- tensorflow contrib模块_OpenCV DNN 模块-风格迁移
本文主要介绍OpenCV的DNN模块的使用.OpenCV的DNN模块自从contrib仓库开始,就是只支持推理,不支持训练.但是仅仅只是推理方面,也够强大了.现在OpenCV已经支持TensorFlo ...
- OpenCV-图像着色(采用DNN模块导入深度学习模型)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 图像着色最早是应用在图像修复方面,将一些过去的黑白旧照根据预设色盘上色,得到色彩饱满的 ...
- Opencv、dnn部署自己的Yolov5模型记录
Opencv.dnn部署自己的Yolov5模型记录 一.环境配置 1.opencv == 4.5.1+dnn模块 2.pytorch == 1.8 3.ubuntu18.04 二.代码来源 1.htt ...
最新文章
- Python十大装腔语法
- a连接带id转送不了数据_你找到了数据清洗利器?
- mysql 密码 You must reset your password using ALTER USER statement before executing this statement....
- 透明物体分割学习笔记
- Kafka消费者Consumer常用配置
- The Simple Life
- PHP 模拟POST请求
- “数据门”事件频发 如何避免人为因素导致数据泄露?
- JavaScript之常用方法讲解
- thinkphp的快捷方法实例化对象
- 《Spring实战》第一章 — Spring之旅
- 图片保存到数据库和从数据库读取图片并显示(C#)
- 怎样提高自己的Java编程能力?
- Oracle分区查询
- 幻想三国android官方版,幻想三国ol官方版
- Python对电影数据简单分析
- npm安装报错(npm ERR code EPERM npm ERR syscall mkdir npm ERR path CProgram Filesnodejsnode_ca...)
- 球迷必备:2012欧洲杯手机观战指南
- 白盒测试与黑盒测试的联系与区别
- 抖音运营变现必知的几个常识;新手不看后悔一辈子丨国仁网络资讯
热门文章
- selenium得到一个动态页面
- 干扰网络信号的app_解决家中WIFI信号无法全面覆盖的方法
- c52单片机控制l298n步进电机角度_【设计图文】单片机实现的步进电机控制系统(开题报告+论文+文献综述+外文翻译+DWG图纸)...
- Java爬虫系列二:使用HttpClient抓取页面HTML
- 动态删除列表中的元素
- Vue 犯罪指南:TypeError: Right-hand side of 'instanceof' is not an object
- 解决方案:IndentationError: unindent does not match any outer indentation level
- 基于zookeeper实现配置集中管理【转】
- 类型的权限已失败 SqlClientPermission
- for循环如果先--_如果再写for循环,我就锤自己!