之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后,再重点学习自己感兴趣的部分的话,就会有一览众山小的感觉,于是,就决定写出这篇文章,作为启程OpenCV系列博文的第二篇。

至于OpenCV组件结构的研究方法,我们不妨管中窥豹,通过opencv安装路径下include目录里面头文件的分类存放,来一窥OpenCV这些年迅猛发展起来的庞杂组件架构。

我们进入到D:\ProgramFiles\opencv\build\include目录,可以看到有opencv和opencv2这两个文件夹。显然,opencv这个文件夹里面包含着旧版的头文件。而opencv2这个文件夹里面包含着具有时代意义的新版OpenCV2系列的头文件。

(http://blog.csdn.net/poem_qianmo/article/details/20911629)

OpenCV整体的模块架构-LMLPHP

在opencv这个文件夹里面,也就是D:\Program Files\opencv\build\include\opencv目录下,可以看到如下的各种头文件。这里面大概就是opencv 1.0最核心的,而且保留下来的内容的头文件,可以把它们整体理解为一个组件。

OpenCV整体的模块架构-LMLPHP

再来看看我们重点关注的opencv2这边,在D:\ProgramFiles\opencv\build\include\opencv2目录下,我们可以看到这些文件夹:

OpenCV整体的模块架构-LMLPHP

我们灵机一动,发现下面有个叫opencv_modules.hpp的hpp文件,一看就知道里面存放的是opencv2中的新模块构造相关的说明代码,打开一看,果不其然,定义的是OpenCV2所有组件的宏:

01./*
02. * ** File generated automatically, do not modify **
03. *
04. *This file defines the list of modules available in current build configuration
05. *
06. *
07.*/
08.
09.#define HAVE_OPENCV_CALIB3D
10.#define HAVE_OPENCV_CONTRIB
11.#define HAVE_OPENCV_CORE
12.#define HAVE_OPENCV_FEATURES2D
13.#define HAVE_OPENCV_FLANN
14.#define HAVE_OPENCV_GPU
15.#define HAVE_OPENCV_HIGHGUI
16.#define HAVE_OPENCV_IMGPROC
17.#define HAVE_OPENCV_LEGACY
18.#define HAVE_OPENCV_ML
19.#define HAVE_OPENCV_NONFREE
20.#define HAVE_OPENCV_OBJDETECT
21.#define HAVE_OPENCV_OCL
22.#define HAVE_OPENCV_PHOTO
23.#define HAVE_OPENCV_STITCHING
24.#define HAVE_OPENCV_SUPERRES
25.#define HAVE_OPENCV_TS
26.#define HAVE_OPENCV_VIDEO
27.#define HAVE_OPENCV_VIDEOSTAB
05-02 10:26