OpenCV各版本差异
Opencv2標志著opencv革命性的改變,Opencv2帶來了全新的C++接口,將Opencv的能力無限放大。在2.0時代,opencv增加了新的平臺支持,包括iOS和Android,通過CUDA和openGL實現了GPU加速,為Python和Java用戶提供了接口。
Opencv 3改變了項目架構的方式,3.0版本不會像2.0版本一樣激進的嘗試,只會有足夠穩定的改進。項目架構的改變是Opencv 3最為重大的革新之處。2.0版本是各個模塊都是以整體的形式構建然后組合在一起的。然而,隨著功能的增加,opencv主體集成了各種各樣的功能模塊,變得越來越臃腫。而3.0版本就是為了給日益發福的opencv減肥,因為Opencv3決定向其他大項目一樣,拋棄整體架構,使用內核+插件的架構形式。
在GitHub中,除了存放著正式版本的opencv的主倉庫和新增加的“opencv_extra”倉庫以外,opencv3中還添加了一個名為“opencv_contrib”的全新倉庫,該倉庫包括很多讓人興奮的功能:臉部識別,文本探測,文本識別,新的邊緣檢測器,充滿藝術感的圖像修復,深度地圖處理,新的光流和追蹤算法等。
opencv_contrib倉庫是大多數實驗性代碼放置的地方,一些API可能會有改變,這些額外模塊可以在CMake中用OPENCV_EXTRA_MODULES_PATH=/modules傳遞給CMake文件。
OpenCV 1.x
OpenCV 最初基于C語言開發,API也都是基于C的,面臨內存管理、指針等C語言固有的麻煩。
2006年10月1.0發布時,部分使用了C++,同時支持Python,其中已經有了random trees、boosted trees、neural nets等機器學習方法,完善對圖形界面的支持。
2008年10月1.1pre1發布,使用 VS2005構建,Python bindings支持Python 2.6,Linux下支持Octave bindings,在這一版本中加入了SURF、RANSAC、Fast approximate nearest neighbor search等,Face Detection (cvHaarDetectObjects)也變得更快。
OpenCV 2.x
當C++流行起來,OpenCV 2.x發布,其盡量使用C++而不是C,但是為了向前兼容,仍保留了對C API的支持。從2010年開始,2.x決定不再頻繁支持和更新C API,而是focus在C++ API,C API僅作備份。
2009年9月2.0 beta發布,主要使用CMake構建,加入了很多新特征、描述子等,如FAST、LBP等。
2010年4月2.1版本,加入了Grabcut等,可以使用SSE/SSE2…指令集。
2010年10月2.2版本發布,OpenCV的模塊變成了大家熟悉的模樣,像opencv_imgproc、opencv_features2d等,同時有了opencv_contrib用于放置尚未成熟的代碼,opencv_gpu放置使用CUDA加速的OpenCV函數。
2011年6月起的2.3.x版本、2012年4月起的2.4.x版本,一面增加新方法,一面修復bug,同時加強對GPU、Java for Android、 OpenCL、并行化的支持等等,OpenCV愈加穩定完善,值得注意的是 SIFT和SURF從2.4開始被放到了nonfree 模塊(因為專利)。
考慮到過渡,OpenCV 2.4.x仍在維護,不過以后可能僅做bug修復和效率提升,不再增加新功能——鼓勵向3.x遷移。
OpenCV 3.x
隨著3.x的發布,1.x的C API將被淘汰不再被支持,以后C API可能通過C++源代碼自動生成。3.x與2.x不完全兼容,與2.x相比,主要的不同之處在于OpenCV 3.x 的大部分方法都使用了OpenCL加速。
2014年8月3.0 alpha發布,除大部分方法都使用OpenCL加速外,3.x默認包含以及使用IPP,同時,matlab bindings、Face Recognition、SIFT、SURF、 text detector、motion templates & simple flow 等都移到了opencv_contrib下(opencv_contrib不僅存放了尚未穩定的代碼,同時也存放了涉及專利保護的技術實現),大量涌現的新方法也包含在其中。
2017年8月3.3版本,2017年12月開始的3.4.x版本,opencv_dnn從opencv_contrib移至opencv,同時OpenCV開始支持C++ 11構建,之后明顯感到對神經網絡的支持在加強,opencv_dnn被持續改進和擴充。
OpenCV 4.0
2018年10月4.0.0發布,OpenCV開始需要支持C++11的編譯器才能編譯,同時對幾百個基礎函數使用 "wide universal intrinsics"重寫,這些內聯函數可以根據目標平臺和編譯選項映射為SSE2、 SSE4、 AVX2、NEON 或者 VSX 內聯函數,獲得性能提升。此外,還加入了QR code的檢測和識別,以及Kinect Fusion algorithm,DNN也在持續改善和擴充。
參考https://www.cnblogs.com/shine-lee/p/9884551.html
總結
以上是生活随笔為你收集整理的OpenCV各版本差异的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 郎咸平教授谈P2P
- 下一篇: vue汉字转拼音-pinyin.js