Windows 下使用 CMake + Visual Studio 2022 編譯 OpenCV 4.8.1 及其擴(kuò)展模塊

一. 背景

目前維護(hù)的某個(gè)項(xiàng)目是在 Windows 下運(yùn)行的,并且使用了 OpenCV 4.5.2 版本。

我本地的開發(fā)環(huán)境是 Mac 并使用了比較新的 OpenCV 4.8.1 版本。為了和本地開發(fā)環(huán)境保持一致,我打算對(duì)項(xiàng)目中使用的 OpenCV 進(jìn)行升級(jí),因?yàn)樵擁?xiàng)目還是用了擴(kuò)展模塊的一些功能,所以需要自行編譯。

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

二. 需要準(zhǔn)備的軟件

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

cmake.png

Visual Studio 2022 社區(qū)版本
https://visualstudio.microsoft.com/zh-hans/vs/

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

opencv.png

OpenCV 4.8.1 擴(kuò)展模塊源碼包
https://github.com/opencv/opencv_contrib/releases/tag/4.8.1

擴(kuò)展模塊.png

三. 編譯

3.1 使用 CMake

3.1.1 準(zhǔn)備工作

解壓 OpenCV4.8.1 源碼包和擴(kuò)展模塊源碼包到某個(gè)位置


源碼包和擴(kuò)展模塊源碼包.jpg

打開 cmake-gui,設(shè)置 OpenCV4.8.1 源碼的位置和輸出編譯的二進(jìn)制文件的位置


源碼的位置.jpg

3.1.2 Configure

點(diǎn)擊"Configure",彈窗會(huì)顯示build目錄沒有創(chuàng)建,是否需要?jiǎng)?chuàng)建。


點(diǎn)擊"Configure".jpg

點(diǎn)擊“Yes"之后,CMake 會(huì)讓你選擇使用什么工具來生成這個(gè)項(xiàng)目。我們采用 Visual Studio 2022。


選擇工具.jpg

"Configure"配置成功后,會(huì)出現(xiàn)這個(gè)界面


配置成功后.jpg

此時(shí),我們可以設(shè)置擴(kuò)展模塊的路徑


設(shè)置擴(kuò)展模塊的路徑.jpg

擴(kuò)展模塊的路徑在設(shè)置時(shí),一定要到 modules 這個(gè)文件夾,否則后面再次"Configure"會(huì)失敗。

如果需要編譯 OpenCV World 模塊,也需要在這里單獨(dú)設(shè)置。


設(shè)置world模塊.jpg

World 模塊是一個(gè)超級(jí)模塊(super-module),它結(jié)合了用戶選擇的所有其它模塊。它是一個(gè)一體化(all-in-one)模塊,具有所有庫(kù)的功能。

然后再次點(diǎn)擊"Configure"。


再次點(diǎn)擊"Configure".jpg

此時(shí),最好看一下 CMake 的下載日志,下面的文件是 CMake 的下載日志。

cmake 的下載日志.jpg

某些文件的無法下載可能會(huì)最終導(dǎo)致 OpenCV World 模塊無法編譯成功。

我主要是修改這幾個(gè)地方:

a. 進(jìn)入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/ippicv 目錄
將 ippicv.cmake 的 https://raw.githubusercontent.com 修改為:https://raw.staticdn.net
b. 進(jìn)入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/fmpeg 目錄
將 ffmpeg.cmake 的 https://raw.githubusercontent.com 修改為:https://raw.staticdn.net
c. 進(jìn)入 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. 進(jìn)入 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. 進(jìn)入 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

接下來,點(diǎn)擊"Generate"生成使用 CMake 構(gòu)建的項(xiàng)目


點(diǎn)擊"Generate".jpg

3.1.4 Open Project

最后點(diǎn)擊"Open Project",喚起 Visual Studio 2022 打開該項(xiàng)目。

當(dāng)然也可以去輸出編譯的二進(jìn)制文件的目錄(C:/opencv-4.8.1/newbuild) ,打開 OpenCV.sln 文件達(dá)到同樣的效果。

點(diǎn)擊"Open Project".jpg

3.2 使用 Visual Studio 2022

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


配置opencv_world模塊.jpg

找到 CMakeTargets,選擇 ALL_BUILD 進(jìn)行生成。


選擇 ALL_BUILD 進(jìn)行生成.jpg

上述步驟生成成功后,選擇 INSTALL 進(jìn)行生成。


選擇 INSTALL 進(jìn)行生成.jpg

INSTALL 生成成功后,這次編譯算是大功告成了。我們完成了OpenCV4.8.1 及其擴(kuò)展模塊的編譯。


img_v3_02a2_cc847b70-00d4-49fb-90f1-59b8ac06911g.jpg

我們可以在輸出編譯的二進(jìn)制文件的目錄(C:/opencv-4.8.1/newbuild)下找到 install 文件夾


img_v3_02a2_55274a44-6d6f-41b2-807c-c1076da6e2dg.jpg

install 文件夾最終輸出的內(nèi)容如下


install 文件夾最終輸出的內(nèi)容.jpg

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


成功編譯了 opencv_world 模塊.jpg

四. 總結(jié)

本文只是便于自己日后翻閱和查找。

不過整個(gè)編譯過程花費(fèi)了1天多才搞定。編譯的時(shí)候遇到各種問題,其實(shí)只要仔細(xì)閱讀日志進(jìn)行分析,總能解決。

當(dāng)然,自行編譯 OpenCV 庫(kù)有很多好處,可以根據(jù)自己的需要定制 OpenCV 庫(kù),可以針對(duì)特定的硬件平臺(tái)優(yōu)化 OpenCV 庫(kù)等等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容