引言
结合冈萨雷斯的《数字图像处理》和Opencv3.0,学习图像处理算法有一段时间了,知道了函数怎么使用,但不知道opencv所用的函数源代码是如何编写的,“知其然,也要知其所以然”,闲暇之日,研究下源代码的编写,纵然不能全部看懂或者掌握,有收获就是好的。
有诗为证,诗曰:
图像处理有本质,二维数组是内涵。
卷积频域来滤波,轮廓分割形态学。
书山有路勤为径,兴趣使然来做舟。
为识庐山真面目,学习源码实践多。
源代码位置
假如你将opencv3.0解压到D:opencv3.0,那么路径为:
D:opencv3.0opencvsources
文件夹modules和samples是我们重点学习的内容。
图1 文件夹存放内容如下。
- 3rdparty: 包含第三方库,如用视频解码用的 ffmpeg、jpg、png、tiff 等图片的解码库。
- apps: 包含进行 Haar 分类器训练的工具,OpenCV 进行人脸检测便是基于 Haar 分类器。如果你想检测人脸以外的图片,千万不要错过这几个工具。
- cmake: 包含生成工程项目时cmake 的依赖文件,只能用于搜索第三方库,普通开发者不需要关心这个文件夹的内容。
- data: 包含 OpenCV 库及范例中用到的资源文件
- doc: 包含生成文档所需的源文件及辅助脚本
- include: 包含入口头文件。OpenCV子文件夹中是C语言风格的API。OpenCV 2 子文件夹中只有一个 opencv.hpp 文件,这是 OpenCV 2 及 OpenCV 3 推荐使用的头文件
- modules:算法模块的源代码。研究算法的同学 学习的重点!!!
- platforms: 包含交叉编译所需的工具链及额外的代码,交叉编译指的是在一个操作系统中编译供另一个系统使用的文件。
- samples:算法用法示例文件夹
重点文件夹:modules和samples。
modules文件夹
modules文件夹存放了如下内容,主要分为CPU模块和CUDA模块。
- CPU模块
• alib3d: 相机标定及三维重建。相机标定用于取出相机自身缺陷