OpenCV之頭文件分析

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

      一、首先看下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 文件,所以很是適合用來編寫公用的開源庫。dom

       文件夾opencv中的頭文件都是相似的,均包含文件夾opencv2裏的頭文件。因此咱們若是是從低版本的opencv學習過渡到高版本的opencv的話,若是不適應能夠先以opencv文件夾裏的文件調用爲標準。若是熟悉opencv裏的函數分佈,也能夠直接調用opencv2文件夾裏的具體頭文件,這樣在頭文件預編譯提升效率。機器學習

       二、接下來看文件夾opencv2中的文件ide

         

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

三、參考文獻

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

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

相關文章
相關標籤/搜索