当前位置: 首页 > news >正文

开源计算机视觉库OpenCV详解

目录

1、概述

2、OpenCV详细介绍

2.1、OpenCV的起源

2.2、OpenCV开发语言

2.3、OpenCV的应用领域

3、OpenCV模块划分

4、OpenCV源码文件结构

4.1、根目录介绍

4.2、常用模块介绍

4.3、CUDA加速模块

5、OpenCV配置以及Visual Studio使用OpenCV

6、关于Lena图片

7、OpenCV和OpenGL的区别

8、OpenCV与YOLO的区别

9、OpenGL与DirectX的区别


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具案例集锦(专栏文章正在更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_12279968.html

C/C++基础与进阶icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html

1、概述

       在计算机视觉项目的开发中,OpenCV作为最大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。

        本文将主要介绍OpenCV开发的一些基础知识、入门上手的方法与步骤等。


 在这里,给大家重点推荐一下我的两个热门畅销专栏

专栏1(该专栏订阅量接近350个,有很强的实战参考价值,广受好评!)

C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931

本专栏根据近几年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的实战问题分析实例,带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!

专栏中的文章都是通过项目实战总结出来的,有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!

专栏2: 

C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html

以多年的开发实战为基础,总结并讲解一些的C/C++基础与进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域的多个方面的内容,同时给出C/C++及网络方面的常见笔试面试题,并详细讲述Visual Studio常用调试手段与技巧!


2、OpenCV详细介绍

2.1、OpenCV的起源

       OpenCV诞生于Intel研究中心,其目的是为了促进CPU密集型应用。为了达到这一目的,Intel启动了多个项目,包括实时光线追踪和三维显示墙。一个在Intel工作的OpenCV作者在访问一些大学时,注意到许多顶尖大学中的研究组(如MIT媒体实验室)拥有很好的内部使用的开放计算机视觉库-- (在学生们之间互相传播的代码),这会帮助一个新生从高的起点开始他/她的计算机视觉研究。这样一个新生可以在以前的基础上继续开始研究,而不用从底层写基本函数。

       因此,OpenCV的目的是开发一个普遍可用的计算机视觉库。在Intel的性能库团队的帮助下 ,OpenCV实现了一些核心代码以及算法,并发给Intel俄罗斯的库团队。这就是OpenCV的诞生之地:在与软件性能库团队的合作下,它开始于Intel的研究中心,并在俄罗斯得到实现和优化。

       俄罗斯团队的主要负责人是Vadim Pisarevsky,他负责管理项目、写代码并优化OpenCV的大部分代码,在OpenCV中很大一部分功劳都属于他。跟他一起,Victor Eruhimov帮助开发了早期的架构,Valery Kuriakin管理俄罗斯实验室并提供了很大的支持。在开始时,OpenCV有以下三大目标:

1)为基本的视觉应用提供开放且优化的源代码,以促进视觉研究的发展。能有效地避免“闭门造车”。

2)通过提供一个通用的架构来传播视觉知识,开发者可以在这个架构上继续开展工作,所以代码应该是非常易读的且可改写。

3)本库采用的协议不要求商业产品继续开放代码,这使得可移植的、性能被优化的代码可以自由获取,可以促进基于视觉的商业应用的发展。

       这些目标说明了OpenCV的起缘。计算机视觉应用的发展会增加对快速处理器的需求。与单独销售软件相比,促进处理器的升级会为Intel带来更多收入。这也许是为什么这个开放且免费的库出现在一家硬件生产企业中,而不是在一家软件公司中。从某种程度上说,在一家硬件公司里,在软件方面会有更多创新的空间。 

2.2、OpenCV开发语言

       OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

       OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。

2.3、OpenCV的应用领域

       OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库。 无论你是做科学研究,还是商业应用,OpenCV都可以作为你理想的工具库,因为,对于这两者,它完全是免费的。同时,由于计算机视觉与机器学习密不可分,该库也包含了比较常用的一些机器学习算法。或许,很多人知道图像识别、机器视觉在安防领域有所应用。但很少有人知道,在航拍图片、街道图片(例如google street view)中,要严重依赖于机器视觉的摄像头标定、图像融合等技术。

       近年来,在入侵检测、特定目标跟踪、目标检测、人脸检测、人脸识别、人脸跟踪等领域,OpenCV可谓大显身手,而这些,仅仅是其应用的冰山一角。如今,来自世界各地的各大公司、科研机构的研究人员,共同维护支持着OpenCV的开源库开发。这些公司和机构包括:微软,IBM,索尼、西门子、google、intel、斯坦福、MIT、CMU、剑桥。

       计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:

1)研究代码(慢,不稳定,独立并与其他库不兼容)
2)耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3)依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状。

而标准的API将简化计算机视觉程序和解决方案的开发。OpenCV致力于成为这样的标准API。OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度(注:OpenCV 2.0版的代码已显著优化,无需IPP来提升性能,故2.0版不再提供IPP接口)。下图为OpenCV与当前其他主流视觉函数库的性能比较。

3、OpenCV模块划分

       OpenCV主体分为五个模块,其中四个模块如下所示:

OpenCV的CV模块包含基本的图像处理函数和高级的计算机视觉算法。ML是机器学习库,包含一些基于统计的分类和聚类工具。HighGUI包含图像和视频输入/输出的函数。CXCore包含OpenCV的一些基本数据结构和相关函数。

       目前,我们当前讨论的是OpenCV3.2.0版本。OpenCV3.0与OpenCV2.0的版本相比,他的主要改动如下:

1)大体上保留了OpenCV 2经典的C++和Python编程接口风格。其中,Python接口大大增强,也加入了Python 3.x的支持。一般来说,以前版本的程序只要做少数修改,就可以使用OpenCV 3了。另外还改善了Java接口,并且加入了MATLAB支持。
2)架构调整。图片、视频编解码从highgui模块分离出来,组成了imgcodecs和videoio。原先的OpenCL模块ocl事实上与其 它模块融为一体,而CUDA加速模块gpu分解成了数个以cuda开头的模块。此外,除了官方支持的OpenCV代码,还有一些自发贡献的内容、不稳定的 内容,或者版权尚存争议的内容,都放到了新的仓库opencv_contrib中。
3)更多新算法。新版本包括了TLD、鱼眼镜头模型等全新算法,还包括了一些更高层次可以直接拿来用的高级封装,比如汽车检测等。
4)引入T-API,使OpenCL加速更容易。目前可以参考OpenCV源代码中T-API的范例。可以发现,开启和关闭OpenCL加速,只需要一个语句就够了。这也就是为什么ocl模块会消失了吧。
5)更多指令集优化。除了之前为Intel CPU做的优化以外,OpenCV 3还容纳了ARM平台NEON指令集的支持。通过英特尔的帮助,OpenCV 3对x86和x64平台默认使用IPP。OpenCV3.0中部分函数得到加速的示意图如下:

4、OpenCV源码文件结构

        开源库OpenCV的github地址为:https://github.com/opencv,下文以OpenCV3.0版本展开讲述。

4.1、根目录介绍

        OpenCV3.0的sources文件结构如下:

1)3rdparty/,包含第三方的库,比如视频解码用的 ffmpeg,jpg、png、tiff等图片的开源解码库。
2)apps/,包含进行 haar 分类器训练的工具,opencv 进行人脸检测便是基于 haar 分类器。如果你想检测人脸以外的图片,千万不要错过这几个工具。
3)cmake/,包含生成工程项目时 cmake 的依赖文件,用于智能搜索第三方库,普通开发者不需要关心这个文件夹的内容。
4)data/,包含 opencv 库以及范例中用到的资源文件,haar 物体检测的分类器位于haarcascades子文件中。
5)doc/,包含生成文档所需的源文件以及辅助脚本。
6)include/,包含入口头文件。opencv 子文件夹中是 C 语言风格的API,也就是《Learning OpenCV (第一版)》中描述的API函数,官方将逐渐淘汰 C 风格函数,因此我不推荐大家使用该文件夹中的头文件。opencv2 子文件中只有一个 opencv.hpp 文件,这是 cv2 以及 cv3 推荐使用的头文件。
7)modules/,包含核心代码,opencv 真正的代码都在这个文件夹中。opencv 从2.0开始以模块的方式组织各种功能,近两年模块的数量增长得很快,后面我会依次介绍每个模块的作用。
8)platforms/,包含交叉编译所需的工具链以及额外的代码,交叉编译指的是在一个操作系统中编译供另一个系统使用的文件。
9)samples/,范例文件夹。

4.2、常用模块介绍

        modules目录中则包含了OpenCV的主要功能模块,包含了如下的多个模块:

1)androidcamera/,仅用于android平台,使得可以通过与其他平台相同的接口来控制android设备的相机。
2)core/,核心功能模块,定义了基本的数据结构,包括最重要的 Mat 类、XML 读写、opengl三维渲染等。
3)imgproc/,全称为 image processing,即图像处理。包括图像滤波、集合图像变换、直方图计算、形状描述子等。图像处理是计算机视觉的重要工具。
4)imgcodec/,负责各种格式的图片的读写,这个模块是从以前的 highgui 中剥离的。
5)highgui/,高级图形界面及与 QT 框架的整合。
6)video/,视频分析模块。包括背景提取、光流跟踪、卡尔曼滤波等,做视频监控的读者会经常使用这个模块。
7)videoio/,负责视频文件的读写,也包括摄像头、Kinect 等的输入。
8)calib3d/,相机标定以及三维重建。相机标定用于去除相机自身缺陷导致的画面形变,还原真实的场景,确保计算的准确性。三维重建通常用在双目视觉(立体视觉),即两个标定后的摄像头观察同一个场景,通过计算两幅画面中的相关性来估算像素的深度。
9)features2d/,包含 2D 特征值检测的框架。包含各种特征值检测器及描述子,例如 FAST、MSER、OBRB、BRISK等。各类特征值拥有统一的算法接口,因此在不影响程序逻辑的情况下可以进行替换。
10)objdetect/,物体检测模块。包括haar分类器、SVM检测器及文字检测。
11)ml/,全称为 Machine Learning,即机器学习。包括统计模型、K最近邻、支持向量机、决策树、神经网络等经典的机器学习算法。
12)flann/,用于在多维空间内聚类及搜索的近似算法,做图像检索的读者对它不会陌生。
13)photo/,计算摄影学。包括图像修补、去噪、HDR成像、非真实感渲染等。如果读者想实现Photoshop的高级功能,那么这个模块必不可少。
14)stitching/,图像拼接,可用于制作全景图。
15)nonfree/,受专利保护的算法。包含SIFT和SURF,从功能上来说这两个算法属于features2d模块的,但由于它们都是受专利保护的,想在项目中可能需要专利方的许可。
16)shape/,形状匹配算法模块。用于描述形状、比较形状。
17)softcascade/,另一种物体检测算法,Soft Cascade 分类器。包含检测模块和训练模块。
18)superres/,全称为 Super Resolution,用于增强图像的分辨率。
19)videostab/,全称为 Video Stabilization,用于解决相机移动时拍摄的视频不够稳定的问题。
20)viz/,三维可视化模块。可以认为这个模块实现了一个简单的三维可视化引擎,有各种UI控件和键盘、鼠标交互方式。底层实现基于 VTK 这个第三方库。

4.3、CUDA加速模块

        CUDA 是显卡制造商 NVIDIA 推出的通用计算语言,在cv3中有大量的模块已经被移植到了CUDA 语言:

1)cuda/,CUDA-加速的计算机视觉算法,包括数据结构 cuda::GpuMat、 基于cuda的相机标定及三维重建等。
2)cudaarithm/,CUDA-加速的矩阵运算模块。
3)cudabgsegm/,CUDA-加速的背景分割模块,通常用于视频监控。
4)cudacodec/,CUDA-加速的视频编码与解码。
5)cudafeatures2d/,CUDA-加速的特征检测与描述模块,与features2d/模块功能类似。
6)cudafilters/,CUDA-加速的图像滤波。
7)cudaimgproc/,CUDA-加速的图像处理算法,包含直方图计算、霍夫变换等。
8)cudaoptflow/,CUDA-加速的光流检测算法。
9)cudastereo/,CUDA-加速的立体视觉匹配算法。
10)cudawarping/,实现了 CUDA-加速的快速图像变换,包括透视变换、旋转、改变尺寸等。
11)cudaev/,实现 CUDA 版本的核心功能,类似 core/ 模块中的基础算法。

5、OpenCV配置以及Visual Studio使用OpenCV

        了解了OpenCV的数据结构和功能后,下面介绍OpenCV的配置,win7 64 + vs2013 + OpenCV3.0步骤。

1)下载安装opencv 3.0。下载地址:http://opencv.org/downloads.html。
2)配置环境变量:计算机属性->高级系统设置->环境变量->Path->变量值:

3)配置VS2013。首先打开VS2013建立一个Win32控制台项目。然后,在“项目->工程属性->VC++目录”中,加入包含目录
..\opencv\build\include; ..\opencv\build\include\opencv; 
..\opencv\build\include\opencv2。(..代表OpenCV安装的文件夹目录)

加入库目录..\opencv\build\x64\vc12\lib。“项目->工程属性->链接器->输入->附加依赖”中添加附加依赖项:
opencv_ts300d.lib;opencv_world300d.lib:

配置完成后,就可以在vs2013中使用opencv3.0中的函数了。

       经过以上的基础知识介绍后,就可以进行入门的实践了。在上面配置完成的工程中,来显示一幅图片,验证一下是否成功。在解决方案资源管理器中,打开源文件main.cpp(没有可以自己创6、建),添加以下代码

#include<opencv2\opencv.hpp>
using namespace cv;
int main()
{Mat src = imread("lena.jpg"); //图片必须添加到工程目录下imshow("src ", src);waitKey();
}

然后编译代码执行程序,效果如下:

上图是视频图像处理领域最经典的Lena图片,做视频图像处理的朋友肯定都知道这个漂亮的小姐姐是谁

6、关于Lena图片

       图片中的女神名叫莱娜·瑟德贝里(瑞典文:Lena Soderberg),1951 年 3 月 31 日出生于瑞典,在 1972 年 11 月期的《花花公子》杂志中,她成为了当期的玩伴女郎(女模特),拍摄了一些照片。 

       在计算机图像界,Lena图是最受欢迎、使用最多的测试图,在图像处理领域,Lena 成为无人不知、无人不晓的女神。很多图像处理教程和会议论文都是用Lena图作为测试验证图,因此大多数图像处理学习者都是从这张图入门的,在网上也能搜到各种被处理过的相关图片:

因为这张图片,Lena 成为了计算机领域最著名的非专业女性,也是很多 CV 程序员们口口相传的女神。

       在1973年6、7月间,美国南加州大学信号图像处理研究所教授Alexander Sawchuk正在与一名研究生以及SIPI研究室的经理正在匆忙地寻找一副高质量的图片用于大学的会议论文。他们不喜欢1960年代早期所使用的电视标准所用的普通检验图,他们希望找到一幅能够得到很好动态范围的有光泽的图像,并且希望能有一幅人脸图像。正在那时,碰巧有人走了进来并且带着一幅最近出版的《花花公子》。杂志上的Lena照片(Lena Soderberg,莱娜·瑟德贝里,1972年在在芝加哥当模特的瑞典人,是《花花公子》当年的十一月小姐)让教授眼前一亮。教授便将这张图扫描了下来,截取图片上半身的一部分(她的脸部与裸露的肩部)作为了他研究使用的样例图像。从此,这幅512*512的经典Lena图片就诞生了。

       莱娜的这张照片在无意间竟然一炮而红!戴着柔软的羽毛帽子,站在一面全身镜前,回头凝视着观众,她裸露的右肩,眼睛在招手,嘴角挂着蒙娜丽莎式的微笑。自《蒙娜丽莎》以来,没有哪幅图像被研究得如此深入。该图在数字视频处理学习与研究中颇为知名,常被用作数字视频处理各种实验(例如数据压缩和降噪)及科学出版物的例图。莱娜图在图像压缩算法是最广泛应用的标准测试图—她的脸部与裸露的肩部已经变成了事实上的工业标准。 

       从事影像数据的压缩、运算、传输、 解压缩等处理时,都经常采用这张图像来当测试样本。 这张图片含有丰富的频段,包括处于低频的光滑皮肤和处于高频的羽毛,很适合做为测试图片。而人眼对于人脸的细节差别感受也远比一般的景物更为明显。

       戴维·C·蒙森(David C.Munson),IEEE图像处理汇刊(IEEE Transactions on Image Processing)的主编, 在1996年1月引用了两个原因来说明莱娜图在科研领域流行的原因:

1)首先,该图片包含了平整的区块、清晰细致的纹路、渐渐变化的光影、颜色的深浅层次等细节,这些都有益于测试各种不同的图像处理算法。它是一幅很好的测试照片!
2)其次,由于这是一个非常有魅力女人的照片。因此,多数由男性组成图像处理研究行业倾向于使用他们认为很有吸引力的图片,也并不令人惊奇。

       在 1997 年的第五十届 IS&T(图像科学与技术)大会上,Lena 被邀请为贵宾出席,在该会议上,她成了最受欢迎的人物,有人甚至把她称为 “The First Lady of Internet”(互联网第一夫人)。会议上,她做了自己的简要发言,并被无数的粉丝索取签名及拍照。

       以现在的标准来看,Lena图片的分辨率比较低,随机计算机技术的发展,后面可能不再适合作为未来图像处理的测试图片。也许终有一天,它会被计算机图像学丢弃。但不可否认的是,它曾经在计算机图像领域做出过伟大的贡献。

7、OpenCV和OpenGL的区别

       OpenCV和OpenGL都是用来处理图像和视频的,但两者有很大的区别。 

       OpenCV是一个开源计算机视觉库,用于图像和视频处理、分析和识别。它提供了各种算法和工具,如图像处理、特征检测、目标跟踪、人脸识别等,可以在计算机视觉应用中使用。

       OpenGL是一个开源图形库,用于创建3D图形和动画。它提供了各种功能和工具,如渲染、光照、纹理映射等,它可以帮助开发人员实现高效的图形渲染和动画效果,可以与许多编程语言搭配使用,如C++、Java等。它应用于游戏、虚拟现实、建筑等多个领域。此外,OpenGL还提供了一个专用于嵌入式领域的OpenGL ES (OpenGL for Embedded Systems), 是 OpenGL 三维图形 API 的子集,主要针对手机、PAD和游戏主机等嵌入式设备而设计。

       虽然OpenCV和OpenGL都可以用于图像处理和计算机视觉应用,但它们的定位和应用场景不同。OpenCV主要用于图像和视频的处理分析,而OpenGL则主要用于3D图形和动画的创建与渲染。

8、OpenCV与YOLO的区别

       OpenCV和YOLO都是计算机视觉领域的工具库,但它们的作用和使用方式有所不同。

       OpenCV是一个开源的计算机视觉库,提供了各种各样的图像处理和计算机视觉算法,如图像读取、图像处理、图像滤波、图像分割、边缘检测、特征提取、目标检测与跟踪、人脸识别等。OpenCV可以用于图像处理、视频处理、机器人视觉、自动驾驶等多个领域。

       YOLO(You Only Look Once)是一个基于深度学习的开源目标检测算法。相比传统的目标检测算法,YOLO可以实现更快的检测速度,在保持较高的准确率的同时,可以实现实时检测。YOLO采用单个神经网络来同时预测图像中所有物体的类别和位置,可以处理多种尺度和多个物体。YOLO可以用于智能监控、自动驾驶、机器人视觉等领域。

       因此,OpenCV和YOLO都是计算机视觉领域的工具,它们的应用场景和目标有所不同。OpenCV更加通用,可以用于各种图像处理和计算机视觉应用,而YOLO则更加专注于目标检测领域,可以实现实时目标检测,检测效率要高一些。

9、OpenGL与DirectX的区别

        说到OpenCV和OpenGL的区别,我们也来顺便说说OpenGL与DirectX的区别。

        OpenGL和DirectX都是用于渲染3D图形的API,但它们有较大的区别,如下:

1)平台支持:OpenGL是跨平台的API,可以在几乎任何操作系统上运行,而DirectX只能在Windows操作系统上运行。

2)API设计理念:OpenGL的设计理念是简单易用,允许开发人员自由选择和使用不同的实现。而DirectX更注重提供完整的解决方案,包含不同的组件,如Direct3D、Direct2D、DirectCompute等。

3)软硬件实现:OpenGL可以使用多种实现方式,包括软件实现和硬件加速实现。而DirectX只能使用硬件加速实现,因为它是针对Windows操作系统和硬件设计的。

4)开发语言:OpenGL是用C语言编写的API,对于初学者和非专业开发人员来说,学习和使用OpenGL比较困难。而DirectX是用C++编写的API,更易于学习和使用。

5)社区支持:OpenGL有一个活跃的社区,提供了大量的教程、资料和开源项目,使开发人员更容易入门。而DirectX的社区相对较小,因为它是专为Windows平台设计的。

       总的来说,OpenGL和DirectX都有各自的优缺点,在选择使用哪个API时,需要考虑到项目需求、开发成本、平台支持等因素。以多媒体SDL库为例,我们经常使用该库在软件中绘制视频图像,当用在Windows平台上时SDL内部使用DirectX绘图,当用在Linux平台上时SDL内部则使用OpenGL绘图。

相关文章:

开源计算机视觉库OpenCV详解

目录 1、概述 2、OpenCV详细介绍 2.1、OpenCV的起源 2.2、OpenCV开发语言 2.3、OpenCV的应用领域 3、OpenCV模块划分 4、OpenCV源码文件结构 4.1、根目录介绍 4.2、常用模块介绍 4.3、CUDA加速模块 5、OpenCV配置以及Visual Studio使用OpenCV 6、关于Lena图片 7、…...

使用pytorch查看中间层特征矩阵以及卷积核参数

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 1和4是之前讲过的alexnet和resnet模型 2是分析中间层特征矩阵的脚本 3是查看卷积核参数的脚本 1设置预处理方法 和图像训练的时候用的预处理方法保持一致 2实例化模型 3载入之前的模型参数 4载入…...

HarmonyOS4.0从零开始的开发教程09页签切换

HarmonyOS&#xff08;七&#xff09;页签切换 List组件和Grid组件的使用 Tabs组件的使用 概述 在我们常用的应用中&#xff0c;经常会有视图内容切换的场景&#xff0c;来展示更加丰富的内容。比如下面这个页面&#xff0c;点击底部的页签的选项&#xff0c;可以实现“首页…...

大电流H桥电机驱动电路的设计与解析(包括自举电路的讲解,以IR2104+LR7843为例)

大电流H桥电机驱动电路的设计与解析&#xff08;包括自举电路的讲解&#xff0c;以IR2104LR7843为例&#xff09; 电机驱动板主要采用两种驱动芯片&#xff0c;一种是全桥驱动&#xff08;如&#xff1a;HIP4082&#xff09;&#xff0c;一种是半桥驱动&#xff08;如&#xff…...

windows11 windows 11 (win11 win 11) 怎么安装 Python3 ? numpy? sounddevice? 声音信号处理库?

首先确认要安装的 sounddevice 库&#xff0c;链接&#xff1a;https://python-sounddevice.readthedocs.io/en/0.4.6/ 根据文档&#xff0c;可知最新的 sounddevice 版本是 0.4.6 进入安装页面查看&#xff0c;发现 Newest sounddevice 可以使用 pip 安装&#xff0c;如下图…...

git如何配置多个远程仓库,并且进行切换

一、配置多个远程仓库并进行切换&#xff0c;请按照以下步骤进行操作&#xff1a; 打开命令行终端&#xff0c;并进入您的 Git 仓库所在的目录。添加第一个远程仓库&#xff0c;使用以下命令&#xff1a;git remote add origin <第一个远程仓库的 URL>这里将远程仓库命名…...

计算机存储单位 + 程序编译过程

C语言的编译过程 计算机存储单位 头文件包含的两种方式 使用 C/C 程序常用的IDE 常用的C语言编译器&#xff1a; 在选择编译器时&#xff0c;需考虑平台兼容性、性能优化、调试工具和开发人员的个人偏好等因素。 详细教程可转 爱编程的大丙...

vue路由导航守卫(全局守卫、路由独享守卫、组件内守卫)

目录 一、什么是Vue路由导航守卫&#xff1f; 二、全局守卫 1、beforeEach 下面是一个beforeEach的示例代码&#xff1a; 2、beforeResolve 下面是一个beforeResolve的示例代码&#xff1a; 3、afterEach 下面是一个afterEach的示例代码&#xff1a; 三、路由独享守卫…...

单片机双机通信控制跑马灯

实验要求 两个单片机各驱动8个LED灯&#xff0c;构成两个跑马灯&#xff0c;要求甲单片机LED的点亮方式是从上至下&#xff0c;首先是最上面第一个点亮、其次是前两个点亮、其次是前三个点亮……直至8个灯全部点亮&#xff0c;8个灯全部灭&#xff0c;重复这个过程&#xff0c…...

微信小程序:button微信开放能力打开客服会话分享到聊天框

文档 https://developers.weixin.qq.com/miniprogram/dev/component/button.html 打开客服会话 按钮关键属性 open-type"contact"功能按钮 <button class"mo-open-type"open-type"contact"> </button>分享 <button class&q…...

【数据结构】——队列实现二叉树的功能

前言&#xff1a;二叉树的实现方式多种多样&#xff0c;有数组实现满二叉树&#xff0c;有链表实现完全二叉树&#xff0c;今天我们就用队列来实现二叉树。 创建二叉树&#xff1a; typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…...

【已解决】Win7虚拟机安装VMtools报错

在做以前的实验的时候发现要用到Win7虚拟机&#xff0c;于是就安装了一个Win7的虚拟机&#xff0c;但是发现屏幕太小&#xff0c;而且来回复制文本、复制文件太不方便了&#xff0c;索性就安装了VMtools&#xff0c;发现还安装不成– 情况1 报错&#xff1a;本程序需要您将此…...

华为OD机试真题-小明找位置-2023年OD统一考试(C卷)

题目描述&#xff1a; 小朋友出操&#xff0c;按学号从小到大排成一列&#xff1b;小明来迟了&#xff0c;请你给小明出个主意&#xff0c;让他尽快找到他应该排的位置。 算法复杂度要求不高于nLog(n)&#xff1b;学号为整数类型&#xff0c;队列规模<10000&#xff1b; 输…...

2023.2版idea安装教程,现在jdk8已经过去式了,不同idea支持的jdk不同。升级jdk后idea也要随之升级

下载idea2023.2版本&#xff0c;下载之前需要删除之前的版本&#xff0c;一定要删除干净&#xff0c;删除程序要勾选那两个delete 下载路径&#xff1a;其他版本 - IntelliJ IDEA (jetbrains.com.cn) 选择2023.2版本 下载后进入安装程序&#xff0c;选择安装目录&#xff0c;然…...

CSS3技巧36:让内容垂直居中的三种方式

让内容垂直居中&#xff0c;是一个很重要的应用情景&#xff0c;在很多场合都会需要。这也是面试的时候&#xff0c;一些考官喜欢拿来初面的小题目。 这里&#xff0c;小结下让内容垂直居中的三种方式。 当然&#xff0c;读者如果有更好的方法&#xff0c;也可以提出来。 基本…...

空间运算设备-Apple Vision Pro

苹果以其在科技领域的创新而闻名&#xff0c;他们致力于推动技术的边界&#xff0c;这在他们的产品中表现得非常明显。他们尝试开发一项的新型突破性显示技术。在 2023 年 6 月 5 日官网宣布将发布 Apple Vision Pro 头戴空间设备&#xff0c;我们一起来了解一下 Apple Vision …...

cocos creator “TypeError: Cannot set property ‘string‘ of null

背景&#xff1a; 学习cocos creator时遇到"TypeError: Cannot set property string of null" 错误。具体代码如下&#xff1a;property({ type: Label })public stepsLabel: Label | null null;update(deltaTime: number) {this.stepsLabel.string Math.floor(…...

简谈MySQL的binlog模式

一、MySQL的binlog模式介绍 MySQL的binlog模式是一种日志模式&#xff0c;用于记录对MySQL数据库进行的更改操作。通过启用binlog模式&#xff0c;可以将数据库的更改操作记录到二进制日志文件中&#xff0c;以便在后续需要时进行恢复和复制。 要启用binlog模式&#xff0c;请…...

Linux 环境部署RabbitMQ

1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3-management 方式二&#xff1a;从本地加载&#xff08;本文章带有mq安装包&#xff09; docker load -i mq.tar 1.2.安装MQ 执行下面的命令来运行…...

【1day】泛微e-office OA系统xml.php 文件 SORT_ID 参数 SQL 注入漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现...

智能无人零售:革新零售消费体验的未来

智能无人零售&#xff1a;革新零售消费体验的未来 在当今数字化时代&#xff0c;智能无人零售正以惊人的速度改变着我们的购物方式和消费体验。这一新兴领域的发展&#xff0c;为消费者带来了前所未有的便利和个性化选择。 智能无人零售是指利用先进的智能技术和自动化系统&…...

代币化对网约车区块链平台的影响

The effects of tokenization on ride-hailing blockchain platforms 再一次分析一下一篇关于区块链的文章&#xff0c;这篇文章比较新&#xff0c;2023年发表在POMS上。 由于这篇文章跟之前那几篇关注假货的文章的重点不一样&#xff0c;所以需要仔细读一下他的INTRODUCTION…...

YOLOv7 学习笔记

文章目录 前言一、YOLOv7贡献和改进二、YOLOv7核心概念三、YOLOv7架构改进总结 前言 在深度学习和计算机视觉领域&#xff0c;目标检测一直是一个极具挑战性和实用性的研究领域。特别是在实时目标检测方面&#xff0c;准确率和速度之间的平衡成为了关键考量因素。YOLO&#xf…...

【51单片机系列】74HC595实现对LED点阵的控制

本文是关于LED点阵的使用&#xff0c;使用74HC595模块实现对LED点阵的控制。 文章目录 一、8x8LED点阵的原理1.1 LED点阵显示原理1.2 LED点阵内部结构图1.3 开发板上的LED点阵原理图1.4 74HC595芯片 二、使用74HC595模块实现流水灯效果三、 使用74HC595模块控制LED点阵对角线亮…...

Canal笔记:安装与整合Springboot模式Mysql同步Redis

官方文档 https://github.com/alibaba/canal 使用场景 学习一件东西前&#xff0c;要知道为什么使用它。 1、同步mysql数据到redis 常规情况下&#xff0c;产生数据的方法可能有很多地方&#xff0c;那么就需要在多个地方中&#xff0c;都去做mysql数据同步到redis的处理&…...

C++的继承语法

在面向对象编程中&#xff0c;继承是一种强大的机制&#xff0c;允许一个类&#xff08;子类&#xff09;从另一个类&#xff08;父类&#xff09;继承属性和方法。C是一种支持面向对象编程的编程语言&#xff0c;通过其灵活而强大的继承语法&#xff0c;开发者可以构建更加模块…...

C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件

处理PDF文件中的内容是比较麻烦的事情&#xff0c;特别是以表格形式呈现的各种数据。为了充分利用这些宝贵的数据资源&#xff0c;我们可以通过程序提取PDF文件中的表格&#xff0c;并将其保存为更易于处理和分析的格式&#xff0c;如txt、csv、xlsx&#xff0c;从而更方便地对…...

spring boot学习第五篇:spring boot与JPA结合

1、准备表&#xff0c;创建表语句如下 CREATE TABLE girl (id int(11) NOT NULL AUTO_INCREMENT,cup_Size varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4…...

代理IP怎么使用?Mac苹果系统设置http代理IP教程

代理IP是一种通过将请求转发到另一个服务器&#xff0c;以隐藏自己的真实IP地址的服务器。使用代理IP可以保护您的隐私和安全&#xff0c;防止被跟踪或被攻击。在本文中&#xff0c;我们将介绍如何在Mac苹果系统上设置http代理IP教程。 一、了解代理IP 代理IP地址是一种可以用来…...

postgresql_conf中常用配置项

在 PostgreSQL 的 postgresql.conf 配置文件中&#xff0c;有许多常用的配置项&#xff0c;这些配置项可以根据特定需求和性能优化进行调整。以下是一些常用的配置项及其作用&#xff1a; 1. shared_buffers 用于设置 PostgreSQL 实例使用的共享内存缓冲区大小。增加此值可以…...

使用MfgTool烧写前需准备的文件

一. 简介 本文我们就来学习&#xff0c;如何将我们编译的 uboot&#xff0c;zImage&#xff08;内核镜像&#xff09;&#xff0c;xxx.dtb设备树文件&#xff0c;还有制作的根文件系统&#xff0c;这四个文件烧写到开发板中&#xff0c;最后 开发板能正常启动。 本文这里使用…...

SAP UI5 walkthrough step4 XML Views

SAPUI5 指出多种VIEW类型&#xff0c;包括XML,HTML,JavaScript 推荐使用XML&#xff0c;因为可读性更高 我们提前介绍一下MVC架构。 MVC是一种软件架构模式&#xff0c;它包括三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;…...

Java 1对1

文章目录 前言 客户端 服务器端 输出线程端 End 前言 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的网络传输协议&#xff0c;它提供了端到端的数据传输和可靠性保证。 本程序就是基于tcp协议编写而成的。 利用 TCP 协议进行通信的…...

云服务器Centos中安装Docker

云服务器Centos中安装Docker 1 简介DockerCentosCentos和Ubuntu区别 2 安装3 测试hello-world的镜像测试 1 简介 Docker Docker是一个开源的应用容器引擎&#xff0c;利用操作系统本身已有的机制和特性&#xff0c;可以实现远超传统虚拟机的轻量级虚拟化。它支持将软件编译成…...

人工智能教程(三):更多有用的 Python 库

目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在本系列的上一篇人工智能教程&#xff08;二&#xff09;&#xff1a;人工智能的历史以及再探矩阵中&#xff0c;我们回顾了人工智能的历史&#xff0c;然后详细地讨论了矩阵。在…...

【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注&#xff0c;不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目 录 9.10 C设计模式之单例模式设计 举例说明&#xff1a; 9.10 C设计模式之单例模式设计 看过我之前的文章的&#xff0c;简单讲解过C/Q…...

Qt之QCache和QContiguousCache

一.QCache QCache在构造的时候指定了缓存中允许的最大成本,也就是如下构造函数中的参数maxCost。默认情况下,QCaches maxCost() 是100。 QCache(int maxCost = 100) ~QCache() void clear() bool contains(const Key &key) const int count() const bool insert(const …...

Django讲课笔记01:初探Django框架

文章目录 一、学习目标二、课程导入&#xff08;一&#xff09;课程简介&#xff08;二&#xff09;课程目标&#xff08;三&#xff09;适用人群&#xff08;四&#xff09;教学方式&#xff08;五&#xff09;评估方式&#xff08;六&#xff09;参考教材 三、新课讲授&#…...

JS中的闭包

闭包 闭包的概念其实很简单&#xff0c;就是函数A内部有一个函数B,函数B可以访问函数A的变量。也就是说闭包是指有权访问另一个函数作用域中变量的函数&#xff0c;利用闭包可以突破作用域链。 闭包的特性&#xff1a; 1、函数内再嵌套函数 2、内部函数可以引用外层的参数和变…...

深度学习在计算机视觉中的应用

深度学习在计算机视觉中的应用 摘要&#xff1a;本文介绍了深度学习在计算机视觉领域的应用&#xff0c;包括目标检测、图像分类、人脸识别等。通过分析深度学习在计算机视觉中的实际应用案例&#xff0c;阐述了深度学习在计算机视觉中的优势和未来发展趋势。 一、引言 计算…...

模板与泛型编程

函数模板 显示实例化 区别定义与声明 T是模板形参 int是模板实参 inpunt是函数形参 3是函数实参 显示实例化 模板必须实例化可见 翻译单元一处定义原则 与内联函数异同 引入原因&#xff1a;函数模板是为了编译器两个阶段的处理 内联函数是为了能在编译期展开 模板实参的类…...

【Fastadmin】一个完整的轮播图功能示例

目录 1.效果展示&#xff1a; 列表 添加及编辑页面同 2.建表&#xff1a; 3.使用crud一键生成并创建控制器 4.html页面 add.html edit.html index.php 5.js页面 6.小知识点 1.效果展示&#xff1a; 列表 添加及编辑页面同 2.建表&#xff1a; 表名&#xff1a;fa_x…...

Ribbon 饥饿加载

Ribbon默认是采用懒加载&#xff0c;即第一次访问时才会去创建LoadBalanceClient&#xff0c;请求时间会很长而饥饿加载则会在项目启动时创建&#xff0c;降低第一次访问的耗时&#xff0c;通过下面配置开启饥饿加载: 一、懒加载 Ribbon 默认为懒加载即在首次启动Application…...

【AIGC】大语言模型的采样策略--temperature、top-k、top-p等

总结如下&#xff1a; 图片链接 参考 LLM解码-采样策略串讲 LLM大模型解码生成方式总结 LLM探索&#xff1a;GPT类模型的几个常用参数 Top-k, Top-p, Temperature...

pip的基本命令和使用

Pip的基本命令和使用 介绍 Pip是Python的包管理工具&#xff0c;它能够帮助我们安装、升级和卸载Python模块。它是Python标准库的一部分&#xff0c;因此在大多数Python发行版中都已经预装了Pip。本文将介绍Pip的基本命令和使用方法&#xff0c;帮助读者更好地使用Pip管理Pyt…...

RocksDB实现原理

文章目录 简介编译安装RocksDB压缩库UbuntuCentos 基本接口高度分层架构LSM-Tree关于访问速度 MemTable落盘策略 WALRocksDB 中的每个更新操作都会写到两个地方&#xff1a;WAL 创建时机&#xff1a;重要参数 Immutable MemTableSSTBlockCacheLRU 缓存Clock缓存 写入流程读取流…...

mysql 链接超时的几个参数详解

mysql5.7版本中&#xff0c;先查看超时设置参数&#xff0c;我们这里只关注需要的超时参数&#xff0c;并不是全都讲解 show variables like %timeout%; connect_timeout 指的是连接过程中握手的超时时间,在5.0.52以后默认为10秒&#xff0c;之前版本默认是5秒&#xff0c;主…...

[架构之路-259]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 面向服务的架构SOA与微服务架构(以服务为最小的构建单位)

目录 前言&#xff1a; 二、软件架构层面的复用 三、什么是面向服务的架构SOA 3.1 什么是面向服务的架构 3.2 面向服务架构的案例 3.3 云服务&#xff1a;everything is service一切皆服务 四、什么是微服务架构 4.1 什么是微服务架构 4.2 微服务架构的案例 五、企业…...

7z压缩成jar包

比如我们要改下jar包中的某个文件&#xff0c;或者更换一下&#xff0c;那么就要先解压。解压后是这样的 弄好后&#xff0c;使用7z进行压缩&#xff0c;7z默认是标准压缩&#xff0c;会把BOOT-INF\lib 目录下的jar包也进行一次压缩&#xff0c;这会导致java -jar 会报 jar包相…...

python-缩进式编码+算术运算符+定义与赋值代码示例

文章目录 一、​缩进式编码二、算术运算符三、定义与赋值关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 一、​…...