總體修改和改進:
- 重新組織庫結構,用較詳細,更小的模組來取代cxcore, cv, cvaux, highgui 和 ml庫
- opencv_core – core函數庫(基本的結構,架構和線性代數,DFT,xml 和yam i/o介面函數等)
- opencv_imgproc -影像處理函數庫(濾波,高斯模糊,形態學膨脹/腐蝕,線性縮放映像大小,映像幾何變化,顏色結構變化,計算長條圖等)
- opencv_highgui – GUI,映像和視頻介面函數庫
- opencv_ml -統計機器學習模型函數庫(SVM,決策樹,級聯等)
- opencv_features2d -二維特徵檢測器和描述子函數庫(SURF,FAST 等,包括一種新的特徵描述子匹配結構)
- opencv_video -動態分析和物體追蹤函數庫(光流法,移動模板,背景消除)
- opencv_objdetect -映像目標檢測函數庫(haar小波 & LBP臉部偵測和識別,HOG人檢測等)
- opencv_calib3d -網路攝影機標定,視覺匹配和三維資料處理函數庫
- opencv_flann -近似最近領域搜尋庫和OpenCV分裝器
- opencv_contrib - 最新貢獻但不是很成熟的函數庫
- opencv_legacy -過時代碼,為了後續代碼相容性而存在
- opencv_gpu -用CUDA來加速一些openCV函數的類庫(相對不太穩定,但對openCV開發非常有協助)
如果你用Cmake 或者pkg-config來進行配置openCV,如果沒有任何改動,你的源碼編譯會正常。否則,你需要修改串連參數(修改庫名)和更新標頭檔路徑。
仍然支援使用#include <cv.h>等,但是備忘修改為 #include “opencv2/imgproc/imgproc.hpp”等等。
請查看新的c和c++例子檔案,你會發現,這樣範例的標頭檔都採用了新的引用格式。如:https://code.ros.org/svn/opencv/trunk/opencv/samples/c/blobtrack_sample.cpp(這是我自己加的,原文沒有,便於大家查看)
- 新格式的分裝器覆蓋了更多的opencv2.x API,文檔和例子將在後面加上。為了採用額外的函數庫,你需要numpy
SWIG-不在包含Python分裝器
- OpenCV現在支援Android開發(GSoC 2010 工程),一些範例可以在http://opencv.willowgarage.com/wiki/Android 找到
- 完整全新的opencv_gpu加速器模組由NVidida開發支援,詳細請看下面。
新的函數,特徵集
- core:
-
- cv::Matx<T, m, n> 可以增加給定類型,給定大小矩陣
Vec<T, n> 由 Matx<T, n, 1>派生,此類可被用於cv::Mat開銷過大時的小矩陣。此操作子可實現Matx 和 Mat相互轉換。
-
- cv::Mat ,cv::MatND 是同一類型: typedef cv::Mat cv::MatND. 考慮到很多函數沒有檢查矩陣維數,在用openCV處理3維,4維等高維矩陣時要小心。
- 實驗支援支援2.x/3.x特徵 (在Cmake參數選擇WITH_EIGEN2). 同時,可以實現Eigen2 matrices和cv::Mat相互轉換。詳情查看modules/core/include/opencv2/core/eigen.hpp.
- cv::Mat 支援”<<”操作。詳情查看 opencv/samples/cpp/cout_mat.cpp.
- cv::exp ,cv::log由於SSE2的最佳化,速度更快
- imgproc:
-
- 色彩轉換函數被重寫;
-
- RGB->Lab & RGB->Luv 得到明顯改善。函數假設sRGB輸入色彩空間(比如,gamma=2.2),如果你想要原始線性RGB->L**轉換 ,採用CV_LBGR2LAB
- VNG 演算法增加了Bayer->RGB。雖然比簡單迭代演算法慢了很多,但是更詳細的映像資訊
- 對8位元影像增加了RGB->HSV/HLS 轉換函式 ,這裡H通道採用完整的 0..255 地區,而不是原來的0..179地區。轉碼為CV_RGB2HSV_FULL等。
- initUndistortRectifyMap為多角度網路攝影機增添了專用變數: initWideAngleProjMap()
- features2d:
-
- 引入關鍵點檢測,計算描述子和匹配的統一架構。先前的一些可用和新的監測子和描述子,比如SURF,Fast, StarDetector 等,被分裝在這個架構中。這個架構的關鍵的特點(除了為不同檢測子和描述子統一的API)是他為映像匹配和基於紋理的物體檢查提供了高層工具,詳情請看http://opencv.willowgarage.com/documentation/cpp/features2d_common_interfaces_of_feature_detectors.html
C++範例:
-
-
- descriptor_extractor_matcher.cpp –採用關鍵點和描述子 從情境中尋找物體
- generic_descriptor_matcher.cpp – 在物體上採用變動,可以使描述子計算不必太精確。
- bagofwords_classification.cpp –一個用這種架構處理VOC下載的資料的例子,VOC資料集:http://pascallin.ecs.soton.ac.uk/challenges/VOC/
- Ethan Rublee整合了由Michael Calonder提出的最新更快的關鍵點描述子BRIEF。例子請查看opencv/samples/cpp/video_homography.cpp
- SURF 關鍵點檢測子採用TBB (此模組由 imahon 和yvo2m開發)進行並行計算
- objdetect:
-
- LatentSVM 物體檢查子,應用於P. Felzenszwalb的演算法,由Nizhniy Novgorod State University (NNSU) team開發.詳情請查看opencv/samples/c/latentsvmdetect.cpp
- calib3d:
-
x’ = x*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <tangential_distortion for x>,
y’ = y*(1 + k1*r2 + k2*r4 + k3*r6)/(1 + k4*r2 + k5*r4 + k6*r6) + <tangential_distortion for y>
被引入。對廣角鏡頭的網路攝影機標定很有用,因為增加的參數可以最佳化你所提供資料和增加估計這些資料的魯棒性。 或者可以簡單的初始化畸變向量為0,並且CV_CALIB_RATIONAL_MODEL +CV_CALIB_FIX_K3 + CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5 或者其他串連去選擇去增強或者取消一些係數
-
- 增加校正三目網路攝影機(三目在同一水平線上),詳情請查看 samples/cpp/3calibration.cpp
- ml:
-
- highgui:
-
- 增加支援 Qt 後台開發,源於由Yannick Verdie完成的GSoC 2010工程。後台開發有一些新特徵沒有體現,如採用TTF字型的文字翻譯 ,獨立的控制台,包括捲軸,按鈕,選項按鈕,複選按鈕,大小變化,映像顯示區,highgui 表單, “儲存”等等。詳情請看Yannick在youtube視頻示範新特徵:http://www.youtube.com/user/MrFrenchCookie#p/u
- 新的API被引入: http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html,如果你機器上有 Qt SDK (或者 libqt4 開發包),可以採用新的API,並且採用QT編譯OpenCV (pass-DWITH_QT=ON to CMake; 注意結果,確認Qt為GUI背景編譯)
- 支援16位和LZW-壓縮TIFFs
- 支援Linux環境下IEEE1394 模式的網路攝影機
- contrib:
-
- 增加Marius Muja,Antonella Cascitelli, Marco Di Stefano ,Stefano Fabri開發的斜面匹配演算法. 詳情查看 samples/cpp/chamfer.cpp
- gpu:
-
- 這一部分是OpenCV的全新部分,由NVidia開發並支援。注意,此開發包處於測試階段,所以在開發時請注意和關注OpenCV SVN 的更新。
在採用gpu,需要安裝最新的 NVidia CUDA SDK ,並且採用CUDA 編譯OpenCV (-DWITH_CUDA=ON CMake flag).所有函數採用cv::gpu namespace命名空間。完整的函數和類在opencv/modules/gpu/include/opencv2/gpu/gpu.hpp,下面是 API中一些主要組成部分:
-
- 映像計算,濾波操作,形態學,幾何變換,長條圖計算
- 立體視覺匹配演算法:塊匹配, Belief Propagation 和Constant-Space Belief Propagation.
- 基於HOG物體檢查子。It runs more than order of magnitude faster than the CPU version!
-
- python bindings:
-
- 大量 OpenCV 2.x 函數被轉換為Python 語言。
這些新的分裝需要安裝numpy (請查看http://opencv.willowgarage.com/wiki/InstallGuide).
下面是測試python環境下使用OpenCV提供的Canny方法:
import cv
a = cv.LoadImageM('F:/removed_haze.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)
b = cv.LoadImageM('F:/removed_haze.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)
cv.Canny(a, b, 50, 100)
cv.ShowImage('test', b)
cv.WaitKey(0)