opencv中頭文件詳解

 我們利用openCV開源庫進行項目開發時,往往要牽涉到頭文件的添加問題,而openCV中頭文件衆多,該如何選擇呢?下面對openCV2.4.10的頭文件進行一個簡單的梳理,以便能夠快速的添加對應的頭文件。

1、首先看下opencv文件夾中的頭文件


其中cv.h中包含的頭文件:

#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/flann/flann.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/legacy/compat.hpp"

cv.hpp中包含頭文件:

#include <cv.h>

 也就是說cv.hpp是包含cv.h的,程序中凡用到cv.h的地方都可以用cv.hpp 替換,那麼爲什麼又要設置hpp文件呢?hpp是Header Plus Plus的簡寫,與 *.h 文件類似。但與之不同的是,*.hpp將*.cpp中的實現代碼也寫入其中,使得定義與實現都包含在同一文件中。這樣做帶來的好處顯而易見,無需再將cpp文件添加到項目中編譯,減少了編譯次數,也不用發佈煩人的lib,dll 文件,因此非常適合用來編寫公用的開源庫。

文件夾opencv中的頭文件都是類似的,均包含文件夾opencv2裏的頭文件。所以我們如果是從低版本的opencv學習過渡到高版本的opencv的話,如果不適應可以先以opencv文件夾裏的文件調用爲標準。如果熟悉opencv裏的函數分佈,也可以直接調用opencv2文件夾裏的具體頭文件,這樣在頭文件預編譯提高效率。

2、接下來看文件夾opencv2中的文件


先看opencv.hpp文件:

#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/flann/miniflann.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/photo/photo.hpp"
#include "opencv2/video/video.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/ml/ml.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"

很明顯opencv.hpp的頭文件包含了opencv庫裏的所有頭文件。

接着看opencv_modules.hpp文件:

#define HAVE_OPENCV_CALIB3D
#define HAVE_OPENCV_CONTRIB
#define HAVE_OPENCV_CORE
#define HAVE_OPENCV_FEATURES2D
#define HAVE_OPENCV_FLANN
#define HAVE_OPENCV_GPU
#define HAVE_OPENCV_HIGHGUI
#define HAVE_OPENCV_IMGPROC
#define HAVE_OPENCV_LEGACY
#define HAVE_OPENCV_ML
#define HAVE_OPENCV_NONFREE
#define HAVE_OPENCV_OBJDETECT
#define HAVE_OPENCV_OCL
#define HAVE_OPENCV_PHOTO
#define HAVE_OPENCV_STITCHING
#define HAVE_OPENCV_SUPERRES
#define HAVE_OPENCV_TS
#define HAVE_OPENCV_VIDEO
#define HAVE_OPENCV_VIDEOSTAB

其解釋如下:

[calib3d]: 其實就是就是Calibration(校準)加3D這兩個詞的組合縮寫。這個模塊主要是相機校準和三維重建相關的內容。基本的多視角幾何算法,單個立體攝像頭標定,物體姿態估計,立體相似性算法,3D信息的重建等等。

[contrib]:也就是Contributed/Experimental Stuf的縮寫, 該模塊包含了一些最近添加的不太穩定的可選功能,不用去多管。2.4.10裏的這個模塊有新型人臉識別, 立體匹配 ,人工視網膜模型等技術。

      [core]: 核心功能模塊,包含如下內容

OpenCV基本數據結構
動態數據結構
繪圖函數
數組操作相關函數
輔助功能與系統函數和宏
與OpenGL的互操作

     [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,視頻穩定相關的組件

3、參考文獻

[1] http://www.it165.net/pro/html/201404/12370.html(本文中絕大部分內容出自此博客)

[2] http://baike.baidu.com/item/HPP?fr=aladdin


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章