摘要:
由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的,所以我就想着研究一下这个库,这里是个人的学习笔记,不是什么权威的教程,如果你们有错误也麻烦帮我指出哈。
=============================================分割线==================================================
前言:
在具体学习OpenCV的具体功能块之前,我们先来看看OpenCV源码的整体框架,这样也能方便我们在后面的学习中获得更加清晰的思路。
一.文件结构:
要了解整体框架,切入点在于opencv/build目录下的include文件夹,因为这下面包含了OpenCV源码所有的头文件。include下面有两个文件夹:opencv和opencv2:
不难看出,opencv中存放的是旧版中保留的部分OpenCV的头文件,而opencv2中包含的则是改版之后的OpenCV2的各种头文件。
1.opencv文件目录:
2.opencv2文件目录:
在这个文件夹下面,我们可以看到很多子文件目录,这些目录都是按照功能模块进行头文件整合,相同功能块的放在同一子目录下面,其中opencv_modules.hpp这个头文件中,定义了opencv2中所有模块的宏:
二、功能模块:
上面的介绍中我们介绍文件结构的同时,其实也说到了opencv2中的每个子文件夹就对应一个功能模块,那么我们接下来就看看每个功能模块的具体作用,标红为最常用的库文件:
1.【calib3d】
Calibration 3D,相机校准以及三维重建,包含:基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等
2.【core】
核心代码块,包含:OpenCV的基本数据结构、动态数据结构、绘图函数、数组操作相关函数、辅助功能与系统函数和宏,以及与OpenGL的交互操作
3.【features2d】
2D功能框架,包含:特征检测和描述、特征检测器(Feature Detectors)通用接口、描述符提取器(Descriptor Extrators)通用接口、描述符匹配器(Descriptor Matchers)通用接口、通用描述符(Generic Descriptor )匹配器通用接口、关键点绘制函数和匹配功能绘制函数
4.【flann】
Fast Library for Approximate Nearest Neighbors,高维的近似近邻快速搜索算法库,包含:快速近似最近领搜索和聚类
5.【highgui】
高层GUI图形用户界面,包含:媒体的I/O输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等
6.【imgcodecs】
7.【imgproc】
Image Processing,图形处理模块,包含:线性和非线性的图像滤波、图像的几何变换、其他图像变换、直方图相关、结构分析和形状描述、运动分析和对象跟踪、特征检测、目标检测等
8.【ml】
Machine Learning,机器学习模块,基本上就是统计模型和分类算法,包含:统计模型 (Statistical Models)、一般贝叶斯分类器 (Normal Bayes Classifier)、K-近邻 (K-NearestNeighbors)、支持向量机 (Support Vector Machines)、决策树 (Decision Trees)、提升(Boosting)、梯度提高树(Gradient Boosted Trees)、随机树 (Random Trees)、超随机树 (Extremely randomized trees)、期望最大化 (Expectation Maximization)、神经网络 (Neural Networks)、MLData
9.【objdetect】
目标检测模块,包含:Cascade Classification(级联分类)和Latent SVM
10.【photo】
Computational Photography,计算机摄影模块,包含:图像修复和图像去噪
11.【shape】
图形绘制模块
12.【stitching】
Image stitching,图像拼接模块,包含:拼接流水线、特色寻找和匹配图像、估计旋转、自动校准、图片歪斜、接缝估测、曝光补偿、图片混合
13.【superres】
14.【video】
视频分析模块,包含:运动估计、背景分离、对象跟踪等
15.【videoio】
视频输入输出控制模块
16.【videostab】
Video stabilization,视频稳定模块,不常用