當前位置: 妍妍網 > 碼農

Windows 下使用 CMake + Visual Studio 2022 編譯 OpenCV 4.8.1 及其擴充套件模組

2024-04-20碼農


一. 背景

目前維護的某個計畫是在 Windows 下執行的,並且使用了 OpenCV 4.5.2 版本。

我原生的開發環境是 Mac 並使用了比較新的 OpenCV 4.8.1 版本。為了和本地開發環境保持一致,我打算對計畫中使用的 OpenCV 進行升級,因為該計畫還是用了擴充套件模組的一些功能,所以需要自行編譯。

本文只是記錄自己在編譯時踩過的坑,避免下次再犯或者給有需要的人。

二. 需要準備的軟體

CMake 3.13 或者以上版本 https://cmake.org/

Visual Studio 2022 社群版本 https://visualstudio.microsoft.com/zh-hans/vs/

OpenCV 4.8.1 源碼包 https://github.com/opencv/opencv/releases/tag/4.8.1

OpenCV 4.8.1 擴充套件模組源碼包 https://github.com/opencv/opencv_contrib/releases/tag/4.8.1

三. 編譯

3.1 使用 CMake

3.1.1 準備工作

解壓 OpenCV4.8.1 源碼包和擴充套件模組源碼包到某個位置

開啟 cmake-gui,設定 OpenCV4.8.1 源碼的位置和輸出編譯的二進制檔的位置

3.1.2 Configure

點選"Configure",彈窗會顯示build目錄沒有建立,是否需要建立。

點選「Yes"之後,CMake 會讓你選擇使用什麽工具來生成這個計畫。我們采用 Visual Studio 2022。

"Configure"配置成功後,會出現這個界面

此時,我們可以設定擴充套件模組的路徑

擴充套件模組的路徑在設定時, 一定要到 modules 這個資料夾 ,否則後面再次"Configure"會失敗。

如果需要編譯 OpenCV World 模組,也需要在這裏單獨設定。

World 模組是一個超級模組(super-module),它結合了使用者選擇的所有其它模組。它是一個一體化(all-in-one)模組,具有所有庫的功能。

然後再次點選"Configure"。

此時,最好看一下 CMake 的下載日誌,下面的檔是 CMake 的下載日誌。

cmake 的下載日誌.jpg

某些檔的無法下載可能會最終導致 OpenCV World 模組無法編譯成功。

我主要是修改這幾個地方:

a. 進入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/ippicv 目錄 將 ippicv.cmake 的 https://raw.githubusercontent.com 修改為:https://raw.staticdn.net

b. 進入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/fmpeg 目錄 將 ffmpeg.cmake 的 https://raw.githubusercontent.com 修改為:https://raw.staticdn.net

c. 進入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/xfeatures2d/cmake 目錄 將 download_boostdesc.cmake 中的https://raw.githubusercontent.com 修改為:https://raw.staticdn.net

d. 進入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/xfeatures2d/cmake 目錄 將 download_vgg.cmake 中的 https://raw.githubusercontent.com 修改為:https://raw.staticdn.net

e. 進入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/face 目錄 修改 CMakeLists.txt, 將https://raw.githubusercontent.com 修改為:https://raw.staticdn.net

之後再重新"Configure"即可。

3.1.3 Generate

接下來,點選"Generate"生成使用 CMake 構建的計畫

3.1.4 Open Project

最後點選"Open Project",喚起 Visual Studio 2022 開啟該計畫。

當然也可以去輸出編譯的二進制檔的目錄(C:/opencv-4.8.1/newbuild) ,開啟 OpenCV.sln 檔達到同樣的效果。

點選"Open Project".jpg

3.2 使用 Visual Studio 2022

在編譯之前,先配置 opencv_world 模組,然後選擇 release 或者 debug。

找到 CMakeTargets,選擇 ALL_BUILD 進行生成。

上述步驟生成成功後,選擇 INSTALL 進行生成。

INSTALL 生成成功後,這次編譯算是大功告成了。我們完成了OpenCV4.8.1 及其擴充套件模組的編譯。

我們可以在輸出編譯的二進制檔的目錄(C:/opencv-4.8.1/newbuild)下找到 install 資料夾

install 資料夾最終輸出的內容如下

我們也成功編譯了 opencv_world 模組。

四. 總結

本文只是便於自己日後翻閱和尋找。

不過整個編譯過程花費了1天多才搞定。編譯的時候遇到各種問題,其實只要仔細閱讀日誌進行分析,總能解決。

當然,自行編譯 OpenCV 庫有很多好處,可以根據自己的需要客製 OpenCV 庫,可以針對特定的硬體平台最佳化 OpenCV 庫等等。


系統化學習直接掃碼檢視

推薦閱讀