1. 程式人生 > >OpenCV配置於Qt軟體

OpenCV配置於Qt軟體

對於網路上眾多教程,筆者在其中收穫良多。但同時也發現其內容單一、彼此抄襲、以拆東牆補西牆之現況。

       本著記錄生活、傳播發現的精神在此進行記錄,也是為網際網路這滔滔大河的一撇分支,注入一絲活水。

------------------------------------------------------------------------------------------

各項版本引數

       System:      Microsoft Windows 10 專業版64位

       OpenCV:    OpenCV-3.1.0版

       Qt:              Qt-5.6.1 Community版

       CMake:       Cmake-3.6.0版

<本部落格使用軟體均為目前最新版本>

------------------------------------------------------------------------------------------

       在OpenCV包中,已經包含了build資料夾,在其中有官方編譯好的標頭檔案以及動態連結庫、靜態連結庫等。但IDK千千萬,官方不可能將所有對應的檔案釋出出來。就拿OpenCV-3.1.0來說,其僅僅釋出了×64位版本中的vc12版和vc14版。而沒有釋出VS2010對應的vc10版。說了這麼多,筆者想告訴你們的是:想要用的得心應手,必須使用OpenCV原始碼結合CMake工具來製作對應的連結庫和標頭檔案。

------------------------------------------------------------------------------------------

       操作步驟如下:

步驟一:安裝需要的各個軟體,包括Qt、CMake、以及解壓縮OpenCV

       步驟二:各個軟體安置已經安置好,開始cmake。

       步驟三:命令列編譯編譯及安裝

       步驟四:IDK與連結庫標頭檔案的連線

-------------------------------------------------------------------------------------------


----------------------------步驟一-------------------------

分別進行Qt和CMake的安裝和OpenCV安裝包的解壓縮

OpenCV庫在解壓縮之後會在H:\盤中生成資料夾“opencv”,開啟進入可以看到:


 我們需要的原始碼都在“sources”資料夾中,需要注意的是“sources”資料夾中有一個“CMakeLists.txt”的檔案,它向CMake軟體提供了必要的資訊,所以這就提醒我們,進行cmake操作的就是在此資料夾下。


       最後筆者再於H:/根目錄下新建資料夾“OpenCV_QT”用來儲存cmake之後的資料。

----------------------------步驟二-------------------------

可能到這裡,你覺得需要設定環境變量了,因為其他教程都是這樣要求設定編譯器的路徑什麼什麼的。但這裡筆者建議不要設定環境變數,因為根據經驗,很多錯誤就是由於環境變數所引起的。我們需要什麼就手工指定其路徑,不要依靠變數中的路徑。

       但是在考慮到一個問題:即使手工指定編譯器路徑,也僅僅是指定了例如:gcc.exe和g++.exe兩個檔案,其執行的相關項也並沒有給出,往往會導致出現缺少“libwinpthread-1.dll”諸如此類的錯誤。所以,這裡筆者給出的操作方式是:設定環境變數,登出,cmake時手工指出所用的編譯器路徑,雙重保險。

       同時,接下來筆者會向大家展示一個比較常見的錯誤,及其解決方法。

       我們來看一下H:/盤中現在的情況。


       左側為OpenCV解壓縮之後的原始碼;右側檔案用於盛放cmake中間結果。

       開啟CMake,設定“Where is the source code”和“Where to build the binaries”。認真觀察下圖就能發現,資料夾正是上圖的兩個資料夾。


       然後點選左下方的Configure按鈕。進行第一次Configure。


 出現編譯器選擇對話方塊。由於我們選用的Qt軟體的編譯器是MinGW,所以,下拉框中我們選擇MinGW Makefiles選項。

同時由於筆者在第一步並沒有設定環境變數,所以這裡的單選按鈕,選擇第二項“Specify native compilers”,來進行手動指定編譯器。

單擊“Next”之後進入手工指定編譯器路徑。


       需要說明的是,我們Qt的安裝地址是“H:\Qt”資料夾中,所以對應的編譯器,筆者找到是在路徑“H:\Qt\Qt5.6.1\Tools\mingw492_32\bin”檔案中。


C編譯器對應gcc.exe;C++編譯器對應g++.exe

所以才有了前面的一幕:


       在Compilers組框中C對應的是:“H:/Qt/Qt5.6.1/Tools/mingw492_32/bin/gcc.exe”,C++對應的是“H:/Qt/Qt5.6.1/Tools/mingw492_32/bin/g++.exe”,Fortran對應選項不填。

       在這裡會遇到一個錯誤,往往是由於網路不通暢導致的。因為在cmake時,缺少檔案或者檔案Hash值不對時會進行網路下載缺少的東西。網路不同或者網速較慢都可能導致cmake失敗。這裡舉一個例子,點選Configure按鈕之後。


發現其中的檔案opencv_ffmpeg.dll檔案Hash與期待的不一致,所以“Downloading opencv_ffmpeg.dll”通過網路進行重新下載。如果下載成功就會繼續cmake,否則將會終止並報錯。

筆者重新解壓一份OpenCV原始碼,與cmake成功的進行對比,發現了區別


多了一份下載資料,開啟“downloads”:


 三個檔名即CMake軟體所期望的Hash值,開啟之後裡面依次是:“opencv_ffmpeg_64.dll”、“opencv_ffmpeg.dll”、“ffmpeg_version.cmake”

       說了這麼多,只有一句話:CMake的時候請保持網路通暢,並且保持一定速度。

 經過兩次Configure和一次Generate,筆者得到了Cmake之後的部分,這時候還不能稱之為定製的連結庫或者原始碼庫,還需要使用IDK所對應的編譯器進行編譯和安裝。

----------------------------步驟三-------------------------

       進入cmd命令列視窗,輸入“cd /d H:\OpenCV_Qt\”,進入“Where to build the binaries”指定的目錄下。

       輸入“mingw32-make”,便會開始進行make操作,此操作持續時間較長。耐心等待。


       輸入“mingw32-make install”。這部分比較快。

       完成之後,開啟OpenCV_Qt資料夾,尋找“install”資料夾,內有我們所需要的一切。

----------------------------步驟四-------------------------

       開啟“install”檔案;


       標頭檔案在“include”資料夾中,連結庫在“×86”資料夾中。由於Qt軟體的特殊性,使得將OpenCV整合到Qt上的步驟非常簡單

       1.設定環境變數Path = “H:\OpenCV_Qt\install\x86\mingw\bin”,登出。

       2.開啟Qt,新建空白工程。在pro檔案中新增如下語句:

       INCLUDEPATH += H:\Qt_OpenCV\install\include\
                            H:\Qt_OpenCV\install\include\opencv
                            H:\Qt_OpenCV\install\include\opencv2
       LIBS += H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_calib3d310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_core310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_features2d310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_flann310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_highgui310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_imgcodecs310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_imgproc310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_ml310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_objdetect310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_photo310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_shape310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_stitching310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_superres310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_ts310.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_video310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_videoio310.dll.a\
            H:\Qt_OpenCV\install\x86\mingw\lib\libopencv_videostab310.dll.a\

       將標頭檔案包含進去,並將連結庫連線了起來。

------------------------------測試---------------------------

 新建空白工程,在main.cpp中編寫測試程式碼,如下:

    

執行,出現圖片,證明成功了。


------------------------------附加---------------------------

步驟四對應的編譯好的檔案,筆者放到了雲盤之中,方便讀者捨去繁瑣的編譯過程,可直接執行步驟四,方便配置。地址為:連結:http://pan.baidu.com/s/1eShqEsE 密碼:uxh7