一些關於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.)