前言:
😊😊😊欢迎来到本博客😊😊😊
🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。
😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–>搜索你要查询的算子名称或相关知识点,或者通过这篇博客👉通俗易懂OpenCV(C++版)详细教程——OpenCV函数快速查找(不断更新中)]查阅你想知道的知识,即可食用。
🎁🎁🎁支持:如果觉得博主的文章还不错或者您用得到的话,可以悄悄关注一下博主哈,如果三连收藏支持就更好啦!这就是给予我最大的支持!😙😙😙
OpenCV(全称:Open Source Computer Vision Library)是开源的计算机视觉和机器学习库,提供了C++、C、Python、Java接口,并支持Windows、Linux、Android、Mac OS平台。OpenCV自1999年问世以来,就已经成为计算机视觉领域学者和开发人员的首选工具。
OpenCV是由Intel的小组进行开发的,在发布了一系列Beta版本后,1.0版本终于在2006年面市,2009年发布了重要的版本OpenCV 2.X,现在已经是2.4.13版本;从2014年开始,在继续更新OpenCV 2.X版本的同时,发布了OpenCV 3.X版本,现在已经更新到4.6版本了(截止2022.11)。
这里以在Windows下OpenCV 2.x版本为例,介绍整个OpenCV开发包的构成。解压缩所下载的OpenCV压缩包主要有两个文件夹,分别为build和sources。
sources是用来存放源码的,在其子文件夹modules下列出了OpenCV实现的各个模块。
其中core、highgui和imgproc是最基础的模块,也是学习OpenCV的起点。
本专栏主要以这三个模块为基础,重点介绍图像处理基础方法的数学原理。对于其他更高层次的方向及应用也会有相关介绍。
具体模块如下:
模块名 | 注释 | 包含内容 |
---|---|---|
core | 是OpenCV的核心模块,包含了最基本的结构(矩阵,点线和形状等),以及相关的基础运算/操作。 | OpenCV基本数据结构;动态数据结构;绘图函数;数组操作相关函数;辅助功能与系统函数和宏;与OpenGL的互操作 |
imgproc | 图像处理模块,包括图像相关的基础功能(滤波,梯度,改变大小等)和一些高级功能,即图像分割,直方图,形态分析和边缘/直线提取等。 | 线性和非线性的图像滤波; 图像的几何变换;其它(Miscellaneous)图像转换;直方图相关;结构分析和形状描述;运动分析和对象跟踪;特征检测;目标检测等内容 |
highgui | 提供了用户界面和文件读取的基本函数,比如图像显示窗口的生成和控制,图像/视频文件的IO等,,可认为是一个轻量级的Windows UI 工具。 | 媒体的I / O输入输出;视频捕捉;图像和视频的编码解码; 图形交互界面的接口等内容;关键点绘制函数和匹配功能绘制函数;关键点绘制函数和匹配功能绘制函数 |
video | 用于视频分析的常用功能。 | 包含读取和写视频流函数、运动估计,背景分离,对象跟踪等视频处理相关内容。 |
calib3d | 三维重建,立体视觉和相机标定等的相关功能,校准单个/多个/多目摄像头。 | 多视角几何算法;单个立体摄像头标定;物体姿态估计;立体相似性算法;3D信息的重建等等。 |
features2d | 二维特征相关的算法,包含检测、描述或匹配特征点等功能,比如ORB特征。 | 特征检测和描述;特征检测器(Feature Detectors)通用接口;描述符提取器(Descriptor Extractors)通用接口;描述符匹配器(Descriptor Matchers)通用接口; 通用描述符(Generic Descriptor)匹配器通用接口;关键点绘制函数和匹配功能绘制函数 |
objdetect | 目标检测模块,用来检测人脸、行人或者其他物体 | 包含Cascade Classification(级联分类)和Latent SVM这两个部分,如经典的基于Haar、LBP特征的人脸检测,基于HOG的行人、汽车等目标检测。 |
ml | 机器学习算法模块,包含一些视觉中最常用的传统机器学习算法,且能够和OpenCV友好交互。 | 统计模型 (Statistical Models);一般贝叶斯分类器 (Normal Bayes Classifier);K-近邻 (K-NearestNeighbors);支持向量机 (Support Vector Machines);决策树 (Decision Trees);提升(Boosting);梯度提高树(Gradient Boosted Tree;随机树 (Random Trees); 超随机树 (Extremely randomized trees);期望最大化 (Expectation Maximization);神经网络 (Neural Networks); MLData |
flann | 最近邻算法库,用于在多维空间进行聚类和检索,经常和关键点匹配搭配使用,平时很少直接使用,但在其他模块函数中,会调用到该算法。 | 高维的近似近邻快速搜索算法库,包含两个部分:快速近似最近邻搜索和聚类 |
gpu | 包含了一些gpu加速的接口,底层的加速是CUDA实现,前提是需要好的计算资源。 | ———————————— |
photo | 计算摄像学(Computational Photography)相关的接口,比较新的模块。 | 包括图像修复和降噪。 |
stitching | 图像拼接模块,也是一个新的模块,不断更新中。 | 拼接流水线;特点寻找和匹配图像;估计旋转;自动校准;图片歪斜;接缝估测;曝光补偿;图片混合 |
nonfree | 受到专利保护的一些算法。 | 包含特征检测和GPU相关的内容。最好不要商用,可能会被告!! |
contrib | 一些实验性质的算法,新的算法,暂未加入OoenCV库中。 | 包含了一些最近添加的不太稳定的可选功能。2.4.8里的这个模块有新型人脸识别,立体匹配,人工视网膜模型等技术,opencv3.4版本已将此模块去掉。 |
legacy | 一些被取消的接口,保留是考虑到向下兼容,OpenCV3.0已取消 | 运动分析;期望最大化;直方图;平面细分(C API);特征检测和描述(Feature Detection and Description);描述符提取器(Descriptor Extractors)的通用接口;通用描述符(Generic Descriptor Matchers)的常用接口;匹配器 |
ocl | 利用OpenCL并行加速的一些接口,OpenCV3.0已取消,T-API取代。 | ———————————— |
superres | 超分辨率模块,用的不多。 | ———————————— |
viz | 基础的3D渲染模块,底层就是著名的3D工具包VTK(Visualization Toolkit)。 | ———————————— |
build
文件夹存放的是通过源码包编译好的文件。它也是以下部署OpenCV用到的主要文件夹,其中:
–>doc子文件夹:有两个最重要的学习OpenCV的文档(可能没有哦,但不影响),即:
-->opencv2refman.pdf (函数手册,介绍了所有函数的声明及参数解释);
-->opencv_tutorials.pdf(函数使用实例);
–>include子文件夹:存放的是OpenCV的头文件;
–>x64和x86子文件夹:存放的是针对64位和32位Windows系统编译好的.dll和.lib文件;
–>python子文件夹:存放的是OpenCV Python API的动态模块;
–>java子文件夹:存放的是Java API的JAR包。
了解了整个开发包的构成后,就可以开始进行学习实操,要注意的是OpenCV不断迭代更新,算子一直在更新,我们先把基本的,也是比较重要的算子学通、学透,其他算子学习起来也不是很困难的。
OpenCV将每个模块中的源文件编译成一个库文件 ,在使用时, 仅将所需的库文件添加到自己的项目中,与自己的源文件一起连接成可执行程序即可。
最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。OpenCV是学习图像处理理论知识比较好的一个途径,大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,有什么问题希望大家可以积极评论交流,我也会及时更新,来督促自己学习进度。希望大家觉得不错的可以点赞、关注、收藏。