OpenCV头文件探秘

一、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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxpr_ybgg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值