在Windows下配置C, C++編譯OpenCV

OPENCV是一個很棒的機器學習和機器視覺的開源庫,支持衆多編程語言和操做系統平臺,主要應用在人工智能和圖像處理上,再也不說費話了,直接重點。這裏使用OPENCV是2.49,操做系統是WIN10,理論上3.2, 3.3使用一樣的方法也是能夠的,我這邊使用3.2沒有成功,多是GCC和CMAKE不是最新吧,後面會使用新版本開發。

OPENCV原始語言是使用C和C++開發,支持PYTHON和java.。因此要想學好OPENCV,差很少要能讀懂C和C++,最好有一些PYTHON知識,由於我發現PYTHON的示例和DEMO是僅次於C++的,主要是資源質量也至關不錯,寫教程的人也多。html

在WIN下使用OPENCV,最好的工具多是.net吧,看源碼中有很多.net的配置文件,這樣你將會節省不少配置時間。
java

固然.net不是惟一選擇,畢竟OPENCV支持不少種語言開發,.也支持各類平臺,學習一門技術,最好能把他應用在工做中的各個方面,這時GCC+cmake是個很好的選擇,這時你再配上一個本身喜歡的跨平臺的編譯器就完美了,我這裏使用QT,eclipse應該也能夠,不過感受他對C語言不是特別友好,固然其餘的ECMACS或者VIM。
android

其實碼源的編譯並非必須的。若是隻是但願研究算法的應用,而不想去關心算法實現的過程,這時使用opencv發佈的庫文件就夠了,能夠免去編譯。若是但願對他擴展,改進,裁剪,有跨平臺,跨語言研究的更深刻一些,須要根據平臺和須要來編譯源碼。這裏因爲我須要要解決android和java方面的一些應用問題,而JAVA方面的庫好像不是很齊全,並且JAVA樣例代碼也不是很全,有時經常須要深刻了解C,C++和PYTHON代碼,而在我看來可以運行的代碼老是要比不能運行的代碼閱讀研究起來速度要快,而我因爲電腦配置緣由,沒法安裝十分龐大的.net工具,這時gcc ,CMAKE這些輕量級工具就很好使用,WIN平臺須要加上mingw。算法

GCC在WIN下編繹須要依賴mingw環境,並且編繹時的條件選項也須要選擇mingw條件。cmake會把OPENCV的源碼組織成mingw環境GCC支持的項目配置,GCC全終完成編繹,這兩個文件缺一不可,若是你使用.net,就須要用cmake生成.net工程的配置文件。QT是個弱選項,你選擇記事本也能夠完成寫代碼工做,不過效率不高。編程


1.首先是下載OPENCV,最新版本已經到了3.3,可能須要最新的工具才能編繹成功,若是選擇這個版本,建議工具也升到最新,也能夠下2.4X版本,目前國內的不少教程和代碼資源都是這個版本,也能夠多下幾個版本研究,不一樣版本之間架構和API都有不小的變化,須要根據公司須要選擇。網絡

最新版本,首頁最下面就能夠下載:架構

http://opencv.org/eclipse

要下載其餘版本,能夠在這裏下載,選擇winpack或者source,兩個區別在於,後者只是源碼,前者除了源碼外還包括已經編繹好的支持各平臺和語言的對應庫文件。對不會編繹的或者懶於編繹的人有必定幫助,windpack是一個能夠自解壓的壓縮包。找個解壓位置解壓就可安裝。
機器學習

http://opencv.org/releases.html編程語言

2.下載並安裝CMAKE

http://www.cmake.org/

3.下載並安裝mingw和gcc

在MinGW官網中下載「mingw-get-setup.exe」
官網傳送門:http://www.mingw.org/

mingw,安裝完成後點擊「continue」,打開MinGW Installation Manager。
如圖,在含有gcc字樣的那行右鍵,選擇」Mark for Installtion」
而且,選擇「Installtion」-> 「Apply Changes」
而後,點擊「Apply」確認操做
最後,在肯定安裝完成後點擊「Close」關閉對話框

若是沒有網絡,能夠百度高線安裝包安裝

安裝完成後,把F:\Program Files\minGW\bin和F:\Program Files\minGW\msys\1.0\bin設置到環境變量

4.可選。安裝QT,這裏有不少版本QT,能夠選擇最新的穩定版本

下載地址https://download.qt.io/archive/qt/

QT完成後要設置路徑,加到WIN環境變量裏,要不CMAKE建立配置文件時會出錯

make路徑     D:\Qt\Qt5.4.2\Tools\mingw491_32\bin

qmake路徑   D:\Qt\Qt5.4.2\5.4\mingw491_32\bin


5.使用CMAKE生成GCC和QT配置文件

打開cmake的GUI版本cmake-gui.exe,選擇路徑;第一個爲解壓出來的OpenCV所在的路徑,第二個是你指定的用於放置生生成的庫的路徑,也就是目標目錄(我使用的是E:\opencv249\debug,下面圖片是E:OpenCV2,抱歉,借別人的圖,有些不許);

點擊configure,這時會彈出編譯器選擇界面,好比咱們用的是qt是mingw的,則選擇mingw,

若是你是在VS下的,則能夠選擇VS類編譯器。以下圖:


這時,會在目標目錄下生產一些文件。cmake界面出來了一些可選項

勾選QT和OPENGL,其餘不用改,再次點擊configure。



點擊Generate,這時會在目標目錄下生成makefile文件。

win+r輸入cmd進入控制檯

1)進入makefile所在的目錄 :

cd xxx

2)編繹源碼

mingw32-make  

3)拷貝生成的庫到install  目錄

mingw32-make install

這時會在目標目錄下生成一個install文件夾,庫和bin和頭文件都在裏面:

進入install目錄下面,找到bin文件夾,將其路徑加入系統環境變量


至此,OPENCV編繹完畢,能夠試驗一下咱們編的庫是否能夠正常使用,在opencv的E:\opencv249\opencv\sources\samples\cpp下任選一個文件使用GCC編繹

cd進入E:\opencv249\opencv\sources\samples\cpp,執行g++

g++ -o edge edge.cpp -IE:\opencv249\debug\install\include -L E:\opencv249\debug\install\x86\mingw\lib -llibopencv_core249 -llibopencv_highgui249 -llibopencv_imgproc249 -llibopencv_legacy249 -llibopencv_ml249
edge.cpp是要編繹的C++文件,緊跟着是引用的頭文件位置,接着是庫文件位置,你OPENCV安裝位置和庫的位置可能和我不同,須要修改後才能運行,成功運行,說明庫是好了,可使用這條命令試着編寫本身的本身的OPENCV C++代碼或者調試別人的

6.若是須要一個好用的IDE,能夠配置QT

1打開先前安裝好的QT,建立一個GUI工程。

2打開.pro文件,加入如下配置,一樣要改爲本身的路徑,注意路徑中的斜槓

INCLUDEPATH+=E:/opencv249/debug/install/include

LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_calib3d249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_contrib249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_core249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_features2d249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_flann249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_gpu249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_highgui249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_imgproc249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_legacy249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_ml249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_nonfree249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_objdetect249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_photo249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_stitching249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_superres249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_ts249.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_video249.dll.a
LIBS += E:/opencv249/debug/install/x86/mingw/lib/libopencv_videostab249.dll.a

而後在main.c加入一下代碼,或者從opencv\sources\samples\cpp裏複製一個文件過來編繹。
高版本的工具編低版的OPENCV很容易成功,我就幾乎沒出現什麼錯誤,一鼓作氣,低版本工具編高版本OPENCV可能會出錯。

參考:

http://blog.csdn.net/guo8113/article/details/17799463

http://blog.csdn.net/kaychangeek/article/details/52303949

http://blog.sina.com.cn/s/blog_74a459380101oort.html

http://www.cnblogs.com/findumars/p/6021602.html

http://blog.csdn.net/qq_36731677/article/details/54608772