【OpenCV】学习笔记(一):OpenCV4.5.5文件介绍


摘要

最近项目需要,需要做视觉相关的处理,所以学习一些关于OpenCV的知识,通过VS2019的MFC开发+OpenCV4来建立上位机对数字图像和视频进行处理。本篇博客主要介绍OpenCV4.5.5的文件系统各个功能,OpenCV实际是一个开源库,所以有必要对其中所有文件的功能进简单介绍,帮助使用者能够更好地调用OpenCV库。

所用工具:

1、上位机开发软件:Visual Studio 2019

2、OpenCV版本:4.5.5

知识概括:

通过本篇文章您将学到:

1、OpenCV文件系统介绍


一、简介

1.计算机视觉

计算机视觉(Computer Vision)是一门研究如何使机器“看”的科学,其是指用摄像机和电脑代替人眼对目标进行识别、跟踪和测量等,并进一步做图形处理,用电脑处理使之成为更为适合人眼观察或传送给仪器检测图像的一门学科。作为一门科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取“信息”的人工智能系统。因为感知可以看做是从感官信号中提取信息,所以计算机视觉也可以看做是研究如何使人工智能从图像或者多维数据中“感知”的科学。
图像处理(Image Processing)是用计算机对图像进行分析,以达到所需结果的技术,又称影像处理。图像处理技术包括图像压缩,增强和复原,匹配、描述和识别三个部分。图像处理一般指数字图像处理(Digital Image Processing)。其中,数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个较大的二维数组。该数组的元素称为像素,其值称为灰度值。而数字图像处理是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
而OpenCV(Open Source Computer Vision Library)是一个基于开源发行的跨平台计算机视觉库,它实现了计算机视觉和图像处理方面的许多通用算法,已经成为了计算机视觉领域最有力的研究工具之一。

2.OpenCV

OpenCV全称是Open Source Computer Vision Library。OpenCV是由Intel公司发起并参与开发的一个基于BSD开源发行的跨平台计算机视觉库,他有一系列的接口,包括C,C++,Python,MATLAB,Java,可以运行在Windows,Linux,Mac OS,IOS和Android系统上。OpenCV实现多种实时且高效的算法,随着不断研发,C/C++接口函数库应用在大规模多核开发上,大大提高了软件算法的可应用性。OpenCV应用OpenCL接口开发技术,可以充分利用计算机硬件底层平台进行硬件加速。OpenCV实现了图像处理和计算机视觉方面的许多通用算法,因此在当前许多前沿领域有较多应用。

应用领域:
1、人机互动
2、物体识别
3、图像分割
4、人脸识别
5、动作识别
6、运动跟踪
7、机器人
8、运动分析
9、机器视觉
10、结构分析
11、汽车安全驾驶

OpenCV官方下载地址:https://opencv.org/releases/#

3.OpenCV文件夹

通过官网下载最新版的OpenCV4.5.5,之后安装在电脑上,装完之后打开文件夹,会出现如下所示的两个子文件夹:build和source,其他文件不用管。
在这里插入图片描述

build文件夹里放的通常是.h.hpp.lib结尾的库文件,这个文件夹里只有接口,没有.cpp文件,为使用者提供,使用者知道如何调用该文件夹内的接口即可,而不需要知道他是如何实现的。source文件夹里放的是.cpp结尾的源文件,是各种各样的函数实现。opencv的开发者(当然开源后的使用者也可以)通过sources中的源文件,构建出build中的库文件,然后使用者就可以链接这些库,include<头文件>。一般非开源的程序和库是不开放sources的,而opencv作为一个开源库,这些也是使用者可见的。
在这里插入图片描述


二、build文件夹

build文件夹下有6个子文件夹,分别有不同的功能,在下文会依次介绍,除文件夹外还有两个cmake文件都是cmake的一些配置。
在这里插入图片描述

1.bin

该文件夹是在电脑配置环境变量时用到,下一篇会讲解如何配置OpenCV运行的环境,需要在电脑系统的环境变量中添加此路径。

附:环境变量的设置方法:此电脑–空白处右击属性–高级系统设置–环境变量–系统变量的path–新建。

在这里插入图片描述

2.etc

该文件夹存放的是训练好的分类器haarcascades为Haar特征分类器,lbpcascades为LPB特征分类器,目录下的haarcascade_frontalface_alt.xml与haarcascade_frontalface_alt2.xml都是用来检测人脸的Haar分类器。这个haarcascades目录下还有人的全身,眼睛,嘴唇的Haar分类器。两个文件夹下都是XML文件。
在这里插入图片描述

3.include

该文件夹下有一个子文件夹opencv2(在之前的版本中有两个文件夹:opencv和opencv2),该文件夹在VS2019配置包含目录时使用,需要添加include和子文件夹opencv2的路径。该文件夹内的函数也是OpenCV的主要调用接口,下面对所有文件夹的功能和用途进行简单介绍。
在这里插入图片描述
(1)【calib3d】是由calibration(校准)和3D这两个单词的缩写组合而成,模块主要是相机校准和三维重建相关内容,包含相机标定与立体视觉等功能,例如物体位姿估计、三维重建、摄像头标定等。
(2)【core核心功能模块,模块主要包含 OpenCV 库的基础结构以及基本操作,例如OpenCV基本数据结构、绘图函数、数组操作相关函数、动态数据结构、与OpenGL的互操作等。
(3)【dnn深度学习模块,这个模块是OpenCV 4版本的一个特色,其主要包括构建神经网络、加载序列化网络模型等。但是该模块目前仅适用于正向传递计算(测试网络),原则上不支持反向计算(训练网络)。
(4)【features2d】是由features(特征)和2D这两个单词的缩写组合而成,即2D功能框架,提供特征检测和描述、特征检测器通用接口、描述符提取器通用接口等,其功能主要为处理图像特征点,例如特征检测、描述与匹配等。
(5)【flann】这个模块名称是Fast Library for Approximate Nearest Neighbors(快速近似最近邻库)的缩写,这个模块是高维的近似近邻快速搜索算法库,主要包含快速近似最近邻搜索与聚类等。
(6)【gapi】这个模块是OpenCV 4.0中新增加的模块,旨在加速常规的图像处理,与其他模块相比,这个模块主要充当框架而不是某些特定的计算机视觉算法。
(7)【highgui高层GUI图形用户界面,包含创建和操作显示图像的窗口、处理鼠标事件以及键盘命令、提供图形交互可视化界面等。
(8)【imgcodecs图像文件读取与保存模块,主要用于图像文件读取与保存。
(9)【imgproc图像处理模块,该模块是由image(图像)和process(处理)两个单词的缩写组和而成,是重要的图像处理模块,其主要包括图像滤波、几何变换、直方图、特征检测与目标检测等。
(10)【ml机器学习模块,基本上都是统计模型和分类算法,主要为统计分类、回归和数据聚类、支持向量机、随机数、神经网络等。
(11)【objdect目标检测模块,主要用于图像目标检测,例如检测Haar特征。
(12)【photo计算摄影模块,主要包含图像修复和去噪等。
(13)【stitching图像拼接模块,主要包含特征点寻找与匹配图像、估计旋转、自动校准、接缝估计等图像拼接过程的相关内容。
(14)【video视频分析模块,主要包含运动估计、背景分离、对象跟踪等视频处理相关内容。
(15)【videoio视频输入输出模块,主要用于读取与写入视频或者图像序列。

4.x64

因为在64位系统下使用,所以需要用到这个文件夹,老版本的OpenCV还有个x86文件夹,这是供给32位系统使用的,现在已删除。x64文件夹下有两个子文件夹:vc14和vc15。对应不同的VS版本,详见以下备注。
在这里插入图片描述
下面以vc15为例,vc15文件夹下有两个子文件夹:bin和lib。
在这里插入图片描述
bin文件夹下存放的是.dll文件,用来设置环境变量。该文件夹下的三个.dll文件需要在环境变量中添加到系统C:\Windows\System中。具体操作步骤见下篇博客。
在这里插入图片描述

lib文件夹下存放的是.lib文件,用来链接。在VS2019配置库目录时需要包含此路径,在配置链接器中需要将文件夹下455d.lib添加到附加依赖项。
在这里插入图片描述
附:
(1).lib和.dll文件的区别
lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。

(2)动态链接和静态链接
动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息。
静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。

(3)VS和OpenCV的版本对应
opencv2.4.13-----vc11;vc12
opencv2.4.12-----vc11;vc12
opencv2.4.11-----vc10;vc11;vc12
opencv3.3 —vc14
opencv3.4 —vc14;vc15
opencv4.2 —vc15;vc16

其中:
vc8 = Visual Studio 2005
vc9 = Visual Studio 2008
c10 = Visual Studio 2010
vc11 = Visual Studio 2012
vc12 = Visual Studio 2013
vc14 = Visual Studio 2015
vc15 = Visual Studio 2017
vc16 = Visual Studio 2019

5.其他

build文件夹下还有java和python文件夹,由于本博客使用C/C++开发,因此暂时不考虑这些。


三、Source文件夹

该文件夹存放一些.cpp源文件,因为我们只用OpenCV,所以一般用到build中的接口即可,以后这些文件等用到的时候再做分析。其下九个子文件夹的功能简介如下做出解释。
在这里插入图片描述
(1)【3rdparty】:第三方库,如ffmpeg视频编码等。
(2)【apps】:一些应用,比如级联分类器,haar特征分类器。
(3)【cmake】:编译相关。
(4)【data】:级联分类器的一些数据。比如人脸检测、人眼检测等。
(5)【doc】:是一些文档,包含一些教程。
(6)【include】:是所有的头文件。
(7)【modules】:包含了所有的源文件。
(8)【platform】:平台相关,iOS、Android、Linux、script、win。
(9)【samples】:是一些简短的学习用例。


四、总结

经过本篇博客,读者对OpenCV的文件系统应该有了大致了解,下面就该将这些文件应用于具体的工程,本篇博客只介绍文件,下面一步一步将OpenCV应用于VS的MFC中,达到图像处理的目的。


五、附录

OpenCV文件包含关系:
在这里插入图片描述
在这里插入图片描述
PS:码字不易,求各位大佬看完点个赞,感谢!!!


在这里插入图片描述

  • 19
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 从 4.5 版本开始,OpenCV将正式使用Apache 2 授权协议,对开发者更加友好,避免专利算法进入OpenCV带来的潜在纠纷。 2. 因为SIFT 专利到期,成为公有技术,代码被移到主库(其实 4.4 版本已经进了)。 3. OpenCV中的RANSAC 算法进行了改进,相信做过图像匹配的同学都不陌生。 4. 新增了实时单目标跟踪算法SiamRPN++。 5. 改进了数字识别和文本识别的例程: 6. 针对RISC-V指令集进行了优化。 7. 增加Julia语言OpenCV绑定,Julia是一门高性能编程语言,但其一直缺少计算机视觉库的支持,这无疑对Julia社区是个大好消息。 8. 增加对 Macbeth 图检测的支持,Macbeth 图是用于相机颜色校正的图像色块。(很明显这么基础的功能,应该早就支持) 9. RGBD 新增基于 TSDF volume 的 Hashtable ,以支持大范围环境的深度图的融合。 11. 增加了对OpenCL多上下文的支持。 12. DNN 模块改进了对一些层和激活函数的支持(ONNX: ReduceSum, Gather, 改进的Reshape等),后端支持 OpenVINO 到2021.1版,并修复和优化了对CUDA 的支持。 特别值得一提的是,由国内公司OpenAI Lab优化后的OpenCV DNN 在ARM上的表现喜人,在新引擎 Tengine lite 加持下,速度获得了较大幅度提升。 13. OpenCV中的图计算模块G-API,也进行了大量更新。 14. 另外FLANN模块也被改进,新增了机器人手眼校准函数等。 由以上内容可知,OpenCV 4.5 版本没有特别重大的更新,大多是在修补、完善、优化,因为 5.0版本快要到来,4.x 系列版本“基本”已经进入“稳”而不张的维护阶段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值