【OpenCV笔记 03】OpenCV头文件探秘

来源:互联网 发布:js获取当前登录用户名 编辑:程序博客网 时间:2024/05/22 14:26

一、hpp文件的说明:

        hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该cpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。
1、是Header Plus Plus 的简写。
2、与*.h类似,hpp是C++程序头文件 。
3、是VCL 专用的头文件,已预编译。
4、是一般模板类的头文件。
5、一般来说,*.h里面只有声明,没有实现,而*.hpp里声明实现都有,后者可以减 少.cpp的数量。

6、*.h里面可以有using namespace std,而*.hpp里则无。

7、*.hpp要注意的问题有:

      a)不可包含全局对象和全局函数
     由于hpp本质上是作为.h被调用者include,所以当hpp文件中存在全局对象或者全局函数,而该hpp被多个调用者include时,将在链接时导致符号重定义错误。要避免这种情况,需要去除全局对象,将全局函数封装为类的静态方法。
      b)类之间不可循环调用


二、文件探秘

在使用OpenCV3.0编写代码的过程中,总会遇到类似于下面的头文件,

#include<opencv2/opencv.hpp>
出于好奇,于是辗转到安装目录下招待该头文件,其代码如下

#ifndef __OPENCV_ALL_HPP__#define __OPENCV_ALL_HPP__#include "opencv2/core.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/photo.hpp"#include "opencv2/video.hpp"#include "opencv2/features2d.hpp"#include "opencv2/objdetect.hpp"#include "opencv2/calib3d.hpp"#include "opencv2/imgcodecs.hpp"#include "opencv2/videoio.hpp"#include "opencv2/highgui.hpp"#include "opencv2/ml.hpp"#endif

这样就比较好理解了,头文件中包含了其他各模块的头文件,依次是

core:核心功能模块,

imgproc:图像处理模块;

photo:图像修复和图像去噪模块,

video:视频分析组件,包括运动估计、背景分离、对象跟踪等,

features2d:2D功能框架,包括特征检测和描述等

objdetect:目标检测模块,包括Cascade Classification和Latent SVM,

calib3d:主要包括相机校准(calibration)和三维重建等,

imgcodecs:用于图像文件的载入(imread)和输出(imwrite)

videoio:视频流的输入和输入

highgui:高层图形用户界面(GUI),包括媒体输入输出、视频捕捉、图像交互界面接口、图像和视频的编码解码等,

ml:机器学习模块,基本上是统计模型和分类算法,包括SVM、 NN、K-Nearest Neighbors等,我前面的一片翻译博文中有提到。

至于各个模块的具体内容,可以到安装目录下找到头文件(C:\openCV\opencv\build\include\opencv2),然后打开查看详细代码,每个文件犹如一片海洋,你可以尽情享受徜徉在代码世界的乐趣。




1 0