OpenCV 2.4.9 學習筆記(1)—— 基本功能結構
一些關於OpenCV(2.4.9版本)的學習筆記,作為記錄,以免自己忘了。
安裝與配置
OpenCV的下載、安裝以及在各個平臺(Windows/Linux等)配置網上有很多的資料,自己就不用存了。需要或者遇到問題的時候再說。
基本模組結構
OpenCV(Open Source Computer Vision Library),一個遵循BSD協議的計算機視覺技術開源庫,包含了幾百個計算機視覺演算法。目前最新版本應該是OpenCV3.0,alpha版和beta版都有了,我目前是用的2.4.9,3.0版本貌似有不少3D還有GPU相關的更新,很不錯,關於3.0版本的後面再學習。OpenCV 2.x API還是一個完全C++ API,當然也有支援其他一些語言的介面版本。OpenCV的模組包括下面這些:
1、core — 基礎核心模組,定義了一些需要用到的基本的資料結構,包括多為陣列Mat等其他的模組需要的核心物件。
2、imgproc — 影象處理模組,包括了線性和非線性的影象濾波(Linear and Non-Linear Image Filtering)、幾何影象變換(如,縮放(Resize)、仿射與透視變換(affine and perspective warping)、generic table-based remapping)、顏色空間變換( color space conversion)和直方圖(histograms)等。
3、video — 視訊分析模組,包含運動估計(Motion Estimation)、背景消除/背景差分(Background Subtraction)和物體跟蹤(Object Tracking)演算法。
4、calib3d — 3D影象處理方面的一個模組,包含了基本的多視角幾何演算法(basic multiple-view geometry algorithms)、單體和立體相機的標定(Single and Stereo Camera Calibration)、物件姿態估計(Object Pose Estimation)、雙目立體匹配(Stereo Correspondence)演算法和元素的三維重建(Elements of 3D Reconstruction)。
5、features2d — 特徵檢測、描述、匹配演算法模組,包含了顯著特徵檢測演算法(salient feature detectors)、描述運算元(descriptors)和運算元匹配演算法(descriptor matchers)。
6、objdetect — 目標檢測模組,包括實物檢測和一些預定義的物體的檢測如人臉、眼睛、杯子、行人、汽車等。
7、highgui — UI介面模組,為視訊捕捉(Video Capturing)、影象和視訊編碼(Image and Video Codecs)等功能提供易用的UI介面。
8、gpu — gpu模組,用於支援其他模組的GPU加速演算法。
9、ml — 機器學習模組,提供了多種基本和經典的機器學習演算法,用於支援各種計算機視覺功能的實現。
10、還有一些其他的模組,用的少或者不是很大規模,以後用到的時候再記了。
API說明
名稱空間:cv,所有的OpenCV的方法和函式都需要使用這個名稱空間。使用 cv:: 符號或者 using namespace cv 。如:
1 #include "opencv2/core/core.hpp" 2 ... 3 cv::Mat H = cv::findHomography(points1, points2, CV_RANSAC, 5); 4 ...
或者這樣也行:
1 #include "opencv2/core/core.hpp" 2 using namespace cv; 3 ... 4 Mat H = findHomography(points1, points2, CV_RANSAC, 5 ); 5 ...
OpenCV中有些現存的或者以後新版本中會有一些命名與STL庫或者其他庫因同名而衝突。這種情況下,需要顯示地寫出名稱空間 cv::,如下面所示:
1 Mat a(100, 100, CV_32F); 2 randu(a, Scalar::all(1), Scalar::all(std::rand())); 3 cv::log(a, a); 4 a /= std::log(2.)