在上文已经学习过了opencv的编码规则,为了可以方便灵活的运用OPECV库,咱们须要对其框架结构进行学习了解,以方便咱们进行实际工程调用调用。html
打开opencv源码安装的文件夹E:\opencv\opencv算法
能够看到上述文件,很明显,Opencv解压后,提供给咱们一个编译环境及工程的源码环境以及使用的LICENSE。数组
打开build文件夹,能够看到以下文件:网络
其余的文件夹都是一些编译工具文件及兼容文件,这里重点须要关注的是include文件夹,其内包含的就是库文件包含的模块文件,进入到include文件,能够看到两个文件夹,以下所示:数据结构
这里的opencv包含的是C接口,opencv2包含的是C++接口。架构
进入到opencv,能够看到以下文件,app
这里C接口下的模块功能说明以下:框架
进入opencv2能够看到其下又有以下文件:机器学习
这里对C++接口调用的模块进行说明:ide
Mat
和全部其余模块使用的基本功能。
打开opencv下的source文件夹,能够看到以下文件:
3rdparty/,包含第三方的库,好比视频解码用的 ffmpeg,jpg、png、tiff等图片的开源解码库。
apps/,包含进行 haar 分类器训练的工具,opencv 进行人脸检测即是基于 haar 分类器。若是你想检测人脸之外的图片,千万不要错过这几个工具。
cmake/,包含生成工程项目时 cmake 的依赖文件,用于智能搜索第三方库,普通开发者不须要关心这个文件夹的内容。
data/,包含 opencv 库以及范例中用到的资源文件,haar 物体检测的分类器位于haarcascades子文件中。
doc/,包含生成文档所需的源文件以及辅助脚本。
include/,包含入口头文件。opencv 子文件夹中是 C 语言风格的API,也就是《Learning OpenCV (初版)》中描述的API函数,官方将逐渐淘汰 C 风格函数,所以我不推荐你们使用该文件夹中的头文件。opencv2 子文件中只有一个 opencv.hpp 文件,这是 cv2 以及 cv3 推荐使用的头文件。
modules/,包含核心代码,opencv 真正的代码都在这个文件夹中。opencv 从2.0开始以模块的方式组织各类功能,近两年模块的数量增加得很快,后面我会依次介绍每一个模块的做用。
platforms/,包含交叉编译所需的工具链以及额外的代码,交叉编译指的是在一个操做系统中编译供另外一个系统使用的文件。
samples/,范例文件夹,包含大量学习案例。
进入modules文件夹能够看到其下包含以下文件夹:
与build下的include相比,这里源码多了:
viz:三维可视化模块。能够认为这个模块实现了一个简单的三维可视化引擎,有各类UI控件和键盘、鼠标交互方式。底层实现基于 VTK 这个第三方库。
cuda/,CUDA-加速的计算机视觉算法,包括数据结构 cuda::GpuMat、 基于cuda的相机标定及三维重建等。
cudaarithm/,CUDA-加速的矩阵运算模块。
cudabgsegm/,CUDA-加速的背景分割模块,一般用于视频监控。
cudacodec/,CUDA-加速的视频编码与解码。
cudafeatures2d/,CUDA-加速的特征检测与描述模块,与features2d/模块功能相似。
cudafilters/,CUDA-加速的图像滤波。
cudaimgproc/,CUDA-加速的图像处理算法,包含直方图计算、霍夫变换等。
cudaoptflow/,CUDA-加速的光流检测算法。
cudastereo/,CUDA-加速的立体视觉匹配算法。
cudawarping/,实现了 CUDA-加速的快速图像变换,包括透视变换、旋转、改变尺寸等。
cudaev/,实现 CUDA 版本的核心功能,相似 core/ 模块中的基础算法。