Windows系統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++的,主要是資源質量也相當不錯,寫教程的人也多。

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

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

其實碼源的編譯並不是必須的。如果只是希望研究算法的應用,而不想去關心算法實現的過程,這時使用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/

要下載其他版本,可以在這裏下載,選擇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裏複製一個文件過來編繹。