OpenCV DNN(二)——Net

2024-05-28 07:38
文章标签 opencv net dnn

本文主要是介绍OpenCV DNN(二)——Net,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV DNN之Net

好久没有更新了,作为2019年的首发,希望2019年会是腾飞的一年,祝愿大家2019一切都很美好,能在公众号收货更多的干货,大家能一起进步,心想事成。
上一篇博文最后留下了一个尾巴,是关于Net的setInput和forward,当时分别介绍了,这两个函数的定义。本文暂时不深入介绍这两个函数,从OpenCV DNN的Net类入手,拆解OpenCV中DNN的结构。本文主要介绍Net类并且提供googleNet的demo。

Net类的定义

path:opencv/modules/dnn/include/opencv2/dnn/dnn.hpp +365

这个类中定义了创建和操作网络的方法;所谓神经网络其实是一个有向无环图(DAG),图的顶点是层的实例,边表示输入输出关系。每一个层,在网络中都有唯一的整数ID和字符串名称作为标识;同时,这个类支持副本的引用计数,也就是说副本指向同一个实例。

以下是Net类的源代码:

class CV_EXPORTS_W_SIMPLE Net
{
public:CV_WRAP Net();  //!< 默认构造函数CV_WRAP ~Net(); //!< 默认析构函数;引用计数为0则析构//使用Inter model优化器的中间表示来创建网络;//xml是网络拓扑结构的XML配置文件//bin是model的model的二进制文件//使用Inter model优化器创建网络,OpenCV会使用inter的推理引擎后端进行推理;CV_WRAP static Net readFromModelOptimizer(const String& xml, const String& bin);//测试网络中是否有layer,是否为空;若没有layer则返回trueCV_WRAP bool empty() const;//向网络中添加新的layer;//name是layer的名字,是唯一的;//type是网络的类型,卷积层还是relu等;但是必须是OpenCV支持的层,或者自己实现的,在层注册器中注册过的类型;//params是层的参数,用于初始化该层;//返回值为该层唯一的整数ID;若返回-1表示添加失败int addLayer(const String &name, const String &type, LayerParams &params);//添加新层,将其第一个输入与上一层第一个输出相连接;//参数与addLayer函数相同;int addLayerToPrev(const String &name, const String &type, LayerParams &params);//转换layer的string name ;返回整数ID;若为-1,则layer不存在CV_WRAP int getLayerId(const String &layer);//获取layer的string nameCV_WRAP std::vector<String> getLayerNames() const;//字符串和整数的容器typedef DictValue LayerId;//返回指向网络中指定ID的层的指针//ID为整数ID或者字符串IDCV_WRAP Ptr<Layer> getLayer(LayerId layerId);//返回指向特定层的输入层的指针std::vector<Ptr<Layer> > getLayerInputs(LayerId layerId); //连接第一个layer的输出与第二个layer的输入//outPin 第一个layer输出的描述.//inpPin 第二个layer输入的描述.//输入的模板为:<layer_name>.[input_num]//模板层名称的第一部分是添加层的sting名称。如果该部分为空,则使用网络输入伪层;//模板输入编号的第二个可选部分是层输入编号,或者是标签编号。如果省略此部分,则将使 用第一层输入。CV_WRAP void connect(String outPin, String inpPin);//第一层的输出与第二层输入相连接//outLayerId 第一层的标识符//outNum 第一层输出的编号(一个层可能会有多个输出)//inpLayerId 第二层的标识符//inpNum 第二层输入的编号void connect(int outLayerId, int outNum, int inpLayerId, int inpNum);//设置网络输入伪层的

这篇关于OpenCV DNN(二)——Net的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009940

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

Verybot之OpenCV应用三:色标跟踪

下面的这个应用主要完成的是Verybot跟踪色标的功能,识别部分还是居于OpenCV编写,色标跟踪一般需要将图像的颜色模式进行转换,将RGB转换为HSV,因为对HSV格式下的图像进行识别时受光线的影响比较小,但是也有采用RGB模式来进行识别的情况,这种情况一般光线条件比较固定,背景跟识别物在颜色上很容易区分出来。         下面这个程序的流程大致是这样的:

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i