有兩種建置OpenCV的方式,分別為:
這篇會講解如何使用Visual Studio的Build System對OpenCV進行編譯建置,當然如果你想直接使用官方建置好的Visual Studio函式庫,這也是OK的,可以參考【Day2】安裝官方預編譯的OpenCV二進位檔(Windows)。
無論你選擇使用哪一種方式,需要先安裝CMake 3.27.1、建立工作環境、下載OpenCV的第三方模組。
CMake是一個開源的跨平台建置工具,它能夠自動生成用於各種開發環境的建置腳本。安裝CMake是編譯OpenCV的必要步驟,這將幫助你配置和生成相應的專案檔案。前往CMake官方網站,下載Windows x64 Installer,在安裝的過程中Installer會主動提示是否要將cmake加入到環境變數Path,請打勾。
打開命令提示字元,輸入以下命令檢查 CMake 是否安裝成功。如果安裝成功,你會看到 CMake 的版本信息。
cmake --version
新增工作資料夾,在哪裡都可以,本篇放在下載資料夾下。
mkdir %userprofile%\downloads\opencv_workspace
從OpenCV的官方網站下載最新版本的OpenCV原始碼,點選下載Sources,將壓縮檔解壓縮到opencv_workspace資料夾下,本篇使用OpenCV 4.8.0。將解壓縮後的opencv-4.8.0資料夾更名為opencv_workspace\sources
。
OpenCV Contrib包含了一些額外的功能和模組,這些模組可能對你的應用非常有用。
請到opencv_contrib,選擇要使用的OpenCV版本Tag如4.8.0
,點選Code按鈕以後按Download ZIP,解壓縮到opencv_workspace
目錄。
當然如果你的電腦有git的話,也可以使用git clone指令下載opencv_contrib 4.8.0版本,到opencv_workspace
目錄。
git clone --depth 1 --branch 4.8.0 https://github.com/opencv/opencv_contrib.git
安裝Visual Studio完成後,開啟Visual Studio Installer,安裝MSVC編譯器、CMake、MSBuild工具。
開啟CMake(cmake-gui)。完整CMake配置項目請參考 OpenCV configuration options reference。
opencv_workspace\sources
完整路徑。opencv_workspace\build-vs
完整路徑,如下圖(1)。BUILD_opencv
,將顯示出的所有選項打勾,特別是BUILD_opencv_world。CMAKE_INSTALL_PREFIX
,將欄位更改成opencv_workspace\build
,這個資料夾就是將來動態連結庫(DLL)存放的位置,如下圖(3)。。OPENCV_EXTRA_MODULES_PATH
,將欄位更改成opencv_workspace\opencv_contrib\modules
完整路徑。CMAKE_BUILD_TYPE
,更改成Debug或Release可以調整OpenCV的版本,但因為開發的過程難免或需要使用Break point去監控程式的執行狀況,因此建議選擇Debug版本。當然,你也可以兩個版本都進行建置,等到Debug建置安裝完成以後再更改CMAKE_BUILD_TYPE
成Release。移動到opencv_workspace\build-vs
,使用Visual Studio開啟OpenCV.sln。
CMAKE_BUILD_TYPE
一樣。opencv_workspace\build
資料夾下。opencv_workspace\build\x64\vc17
資料夾,底下有lib
靜態連結函式庫資料夾和bin
動態連結函式庫。因為通常編譯器不會主動詢找OpenCV連結函式庫的安裝路徑,需要將OpenCV的執行檔路徑添加到系統的環境變數中。步驟如下:
opencv_workspace\build\x64\vc17\bin
,然後保存變更。下圖是OpenCV安裝完成後的資料夾結構,進入到build
資料夾可以看到:
bin
:存放OpenCV工具執行檔。include
:C語言的include標頭檔,將來在編寫程式的時候使用到的#include <opencv2/opencv.hpp>
就是從這個資料夾下抓的。x64\vc17
:使用MSVC(Microsoft Visual C++)編譯後的動態連結函式庫(*.dll)、靜態連結函式庫(*.lib)就是存放在這裡。
x64\vc17\bin
:動態連結函式庫(*.dll)x64\vc17\lib
:靜態連結函式庫(*.lib)