1. 程式人生 > >在Windows下配置C, C++編譯OpenCV

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

在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裡複製一個檔案過來編繹。
高版本的工具編低版的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


--------------------- 
作者:殘詩 
來源:CSDN 
原文:https://blog.csdn.net/cnbloger/article/details/77466397 
版權宣告:本文為博主原創文章,轉載請附上博文連結!