【4】OpenCV中头.h和.hpp的区别和联系

OpenCV头文件的基本介绍

1  核心模块的介绍

[calib3d]: 其实就是就是Calibration(校准)加3D这两个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容。基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等。

[contrib]:也就是Contributed/Experimental Stuf的缩写, 该模块包含了一些最近添加的不太稳定的可选功能,不用去多管。2.4.10里的这个模块有新型人脸识别, 立体匹配 ,人工视网膜模型等技术。

 [core]: 核心功能模块,

  [imgproc]: Image和Processing这两个单词的缩写组合。图像处理模块,这个模块包含了如下内容

 线性和非线性的图像滤波

图像的几何变换

其它(Miscellaneous)图像转换
直方图相关
结构分析和形状描述
运动分析和对象跟踪
特征检测
目标检测等内容

[features2d]: 也就是Features2D, 2D功能框架 ,包含如下内容

特征检测和描述
特征检测器(Feature Detectors)通用接口
描述符提取器(Descriptor Extractors)通用接口
描述符匹配器(Descriptor Matchers)通用接口
通用描述符(Generic Descriptor)匹配器通用接口
关键点绘制函数和匹配功能绘制函数

   [flann]: Fast Library for Approximate Nearest Neighbors,高维的近似近邻快速搜索算法库, 包含两个部分:快速近似最近邻搜索和聚类

   [gpu]: 运用GPU加速的计算机视觉模块

[highgui]: 也就是high gui,高层GUI图形用户界面,包含媒体的I / O输入输出, 视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容

[legacy]: 一些已经废弃的代码库,保留下来作为向下兼容,包含如下相关的内容

运动分析
期望最大化
直方图
平面细分(C API)
特征检测和描述(Feature Detection and Description)
描述符提取器(Descriptor Extractors)的通用接口
通用描述符(Generic Descriptor Matchers)的常用接口
匹配器

[ml]: Machine Learning,机器学习模块, 基本上是统计模型和分类算法,包含如下内容

统计模型 (Statistical Models)
一般贝叶斯分类器 (Normal Bayes Classifier)
K-近邻 (K-NearestNeighbors)
支持向量机 (Support Vector Machines)
决策树 (Decision Trees)
提升(Boosting)
梯度提高树(Gradient Boosted Trees)
随机树 (Random Trees)
超随机树 (Extremely randomized trees)
期望最大化 (Expectation Maximization)
神经网络 (Neural Networks)
MLData

 [nonfree]: 也就是一些具有专利的算法模块 ,包含特征检测和GPU相关的内容。最好不要商用,可能会被告哦。

[objdetect]: 目标检测模块,包含Cascade Classification(级联分类)和Latent SVM这两个部分。

[ocl]: 即OpenCL-accelerated Computer Vision,运用OpenCL加速的计算机视觉组件模块

[photo]: 也就是Computational Photography,包含图像修复和图像去噪两部分

[stitching]: images stitching,图像拼接模块,包含如下部分:

拼接流水线
特点寻找和匹配图像
估计旋转
自动校准
图片歪斜
接缝估测
曝光补偿
图片混合

[superres]: SuperResolution,超分辨率技术的相关功能模块

[ts]:opencv测试相关代码,不用去管他

[video]: 视频分析组件

该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容

[Videostab]: Video stabilization,视频稳定相关的组件

2  重要概念的区分

几个重要概念的区分

【1】.hpp和.cpp文件的区别和联系

 .hpp是C++程序头文件

*.cpp就是C++源代码文件

【2】cv.hpp 和 opencv.hpp文件的区别和联系

     cv.hpp和opencv.hpp是等同的关系。只不过,前者是早期opencv版本中的定义名称,而后者opencv.hpp则是3.0版本之后的表示方法

【3】.h和.hpp的区别和联系

(1)共同点:#include和opencv.hpp中均包含了以下的头文件:
 
 #include "opencv2/core.hpp"
 #include "opencv2/imgproc.hpp" 
 #include "opencv2/video.hpp"
 #include "opencv2/objdetect.hpp"
 #include "opencv2/imgcodecs.hpp"
 #include "opencv2/highgui.hpp"
 #include "opencv2/ml.hpp"

(2)不同点

1、.hpp是Header   Plus   Plus 的简写。
2、与*.h类似,hpp是C++程序头文件 。
3、是VCL专用的头文件,已预编译。
4、是一般模板类的头文件。
5、一般来说,*.h里面只有声明,没有实现,而*.hpp里声明实现都有,后者可以减少.cpp的数量。
6、*.h里面可以有using   namespace   std,而*.hpp里则无。

 总结一下也就是说cv.hpp是包含cv.h的,程序中凡用到cv.h的地方都可以用cv.hpp 替换。

但是有一点特殊,若调用函数cvgetwinfdowhandle时包含.hpp文件会报错必须包含.h文件,原因是因为.hpp没有命名空间,调用无效。

参考文章

引文1:https://blog.csdn.net/bboytd_lyg/article/details/78457260 

引文2: https://blog.csdn.net/u014260892/article/details/44095241

你可能感兴趣的:(基于c++的图像处理)