Opencv、OpenCV2.x、Opencv3.x个版本的进化,与VS各个版本的匹配问题
首相聲明,本文章借鑒了其他文章,會給與文章鏈接。
1.opencv 與opencv2.x版本
Opencv1.0版本于2006年面世,主要基于C語言。2009年發(fā)布opencv2,主要基于C++。此時OpenCV庫被劃分成多個模塊,這些模塊被編譯成庫文件后,位于lib文件夾中。主要有以下模塊(版本1的結(jié)構(gòu)見我的這篇blog:http://blog.csdn.net/lu597203933/article/details/13614377):
Opencv_core模塊:包含核心功能,尤其是底層數(shù)據(jù)結(jié)構(gòu)和算法函數(shù)。
Opencv_improc模塊:包含圖像處理函數(shù)。
Opencv_highgui模塊:包含讀寫圖像及視頻的函數(shù),以及操作圖形用戶界面函數(shù)。
Opencv_features2d模塊:包含興趣點檢測子,描述子以及興趣點匹配框架。
Opencv_calib3d模塊:包含相機標定,雙目幾何估計以及立體視覺函數(shù)。
Opencv_video模塊:包含運動估算,特征跟蹤以及前景提取函數(shù)與類。
Opencv_objdetect模塊:包括物體檢測函數(shù),如臉部和行人檢測。
庫中還包含其它的工具模塊,如機器學習(opencv_ml),計算幾何(opencv_flann),第三方代碼(opencv_contrib)等。這些模塊都對有一個單獨的頭文件(位于include文件夾)。推薦的聲明方式如下:
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
而#include "cv.h"這是舊的代碼方式,那是庫還沒有被劃分為模塊。
文章鏈接:https://blog.csdn.net/scutjy2015/article/details/72881361
2.opencv2.x與opencv3.x
Opencv2標志著opencv革命性的改變,Opencv2帶來了全新的C++接口,將Opencv的能力無限放大。在2.0時代,opencv增加了新的平臺支持,包括iOS和Android,通過CUDA和openGL實現(xiàn)了GPU加速,為Python和Java用戶提供了接口。
Opencv 3改變了項目架構(gòu)的方式,3.0版本不會像2.0版本一樣激進的嘗試,只會有足夠穩(wěn)定的改進。項目架構(gòu)的改變是Opencv 3最為重大的革新之處。2.0版本是各個模塊都是以整體的形式構(gòu)建然后組合在一起的。然而,隨著功能的增加,opencv主體集成了各種各樣的功能模塊,變得越來越臃腫。而3.0版本就是為了給日益發(fā)福的opencv減肥,因為Opencv3決定向其他大項目一樣,拋棄整體架構(gòu),使用內(nèi)核+插件的架構(gòu)形式。
在GitHub中,除了存放著正式版本的opencv的主倉庫和新增加的“opencv_extra”倉庫以外,opencv3中還添加了一個名為“opencv_contrib”的全新倉庫,該倉庫包括很多讓人興奮的功能:臉部識別,文本探測,文本識別,新的邊緣檢測器,充滿藝術(shù)感的圖像修復,深度地圖處理,新的光流和追蹤算法等。
opencv_contrib倉庫是大多數(shù)實驗性代碼放置的地方,一些API可能會有改變,這些額外模塊可以在CMake中用OPENCV_EXTRA_MODULES_PATH=/modules傳遞給CMake文件。
opencv2項目移植到opencv3需要注意的一些細節(jié)。由于opencv3的主體部分只是在opencv2的基礎(chǔ)上進行小幅度的更改,所以opencv2的大部分程序都可以在opencv3上運行。但有些也會報錯。
1【由于宏名稱的變更造成的“未聲明的標識符”系列問題】
有時候,遇到此類問題加入一句“#include<cv.h>”便可以解決。有時會出現(xiàn)“CV_”式的宏前綴命名規(guī)范的錯誤,因為在opencv3對這些前綴為“CV_”的宏使用了新的命名規(guī)范。遇到該類問題主要有如下解決方法:1直接去掉"CV_"前綴;2需要新的前綴,例如CV_AA改為LINE_AA;3需要在新的命名中使用宏,例如TermCriteria函數(shù)中,CV_TERMCRIT_EPS改為TermCriteria::EPS
2【使用vector容器之時提示"error C2065:"vector":未聲明的標識符】
在opencv3的環(huán)境下未包含STD命名空間,需要在開頭加上一句"using namespace std;"就解決了。
3【其他一些細節(jié)問題】
features2d.hpp頭文件路徑更改。將#include<opencv2/nonfree/features2d.hpp>改為#include<opencv2/features2d.hpp>
core.hpp頭文件路徑更改。將#include <opencv2/core/core.hpp>改為#include<opencv2/core.hpp>
表示顏色時,將CV_RGB改為Scaler
定義尺寸時,將cvSize(-1,-1)改為Size(-1,-1)
用format進行格式化輸出時,將format(r,"python")改為format(r,Formatter::FMT_PYTHON)
原文轉(zhuǎn)載地址:https://blog.csdn.net/yangxueyangxue/article/details/80776255。
3.VS各個版本與opencv版本匹配問題
關(guān)于opencv,我們從opencv2.x開始說明,因為一代版本使用范圍有限,網(wǎng)上基本上都是2.0以上的版本、
VC6.0? vs2005 vs2008其實都需要經(jīng)過cmake這一個步驟,將opencv編譯之后找到相應(yīng)的庫文件,有如下關(guān)系:
opencv 2.3 == vc9
opencv 2.4.10 == vc10、vc11、vc12
opencv 2.4.13 == vc11、vc12
opencv 3.4.0 == vc14、vc15
opencv 3.4.1 == vc14、vc15
關(guān)于vs版本對應(yīng)問題可以參考文章:https://blog.csdn.net/ljsant/article/details/75221118。
對應(yīng)版本說明。在該文件夾下不需要Cmake編譯,直接從里面就可以添加相應(yīng)的庫文件,頭已經(jīng)可編譯的文件,如果opencv版本下沒有對應(yīng)的VC版本則需要通過如下方法(以vs2005來舉例):
可以參考文章:https://blog.csdn.net/blckriver/article/details/81348116。
1、Visual Studio 2005
2、OpenCV-2.4.7
3、cmake-3.4.1-win32-x86 (一般情況下Cmake工具版本要比opencv版本高,理論上可以編譯各種版本的opencv? 根據(jù)項目實際需要來配置。CMake是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。只是 CMake 的組態(tài)檔取名為 CMakeLists.txt。Cmake 并不直接建構(gòu)出最終的軟件,而是產(chǎn)生標準的建構(gòu)檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建構(gòu)方式使用。這使得熟悉某個集成開發(fā)環(huán)境(IDE)的開發(fā)者可以用標準的方式建構(gòu)他的軟件,這種可以使用各平臺的原生建構(gòu)系統(tǒng)的能力是 CMake 和 SCons 等其他類似系統(tǒng)的區(qū)別之處。(參考https://baike.baidu.com/item/cmake/7138032?fr=aladdin))。
Cmake官網(wǎng)地址:https://cmake.org/download/。各種版本都有。
--------------------- ?
作者:瘋狂的挖掘機 ?
來源:CSDN ?
原文:https://blog.csdn.net/ljsant/article/details/88421242 ?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的Opencv、OpenCV2.x、Opencv3.x个版本的进化,与VS各个版本的匹配问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习框架对比
- 下一篇: cvNamedWindow与namedW