Windows 下使用 CMake + Visual Studio 2022 编译 OpenCV 4.8.1 及其扩展模块

一. 背景

目前维护的某个项目是在 Windows 下运行的,并且使用了 OpenCV 4.5.2 版本。

我本地的开发环境是 Mac 并使用了比较新的 OpenCV 4.8.1 版本。为了和本地开发环境保持一致,我打算对项目中使用的 OpenCV 进行升级,因为该项目还是用了扩展模块的一些功能,所以需要自行编译。

本文只是记录自己在编译时踩过的坑,避免下次再犯或者给有需要的人。

二. 需要准备的软件

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

Visual Studio 2022 社区版本 visualstudio.microsoft.com/zh-hans/vs/

OpenCV 4.8.1 源码包 github.com/opencv/open...

OpenCV 4.8.1 扩展模块源码包 github.com/opencv/open...

三. 编译

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 的下载日志。

某些文件的无法下载可能会最终导致 OpenCV World 模块无法编译成功。

我主要是修改这几个地方:

a. 进入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/ippicv 目录, 将 ippicv.cmake 的 raw.githubusercontent.com 修改为:raw.staticdn.net

b. 进入 C:/opencv-4.8.1/opencv-4.8.1/3rdparty/fmpeg 目录, 将 ffmpeg.cmake 的 raw.githubusercontent.com 修改为:raw.staticdn.net

c. 进入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/xfeatures2d/cmake 目录, 将 download_boostdesc.cmake 中的raw.githubusercontent.com 修改为:raw.staticdn.net

d. 进入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/xfeatures2d/cmake 目录, 将 download_vgg.cmake 中的 raw.githubusercontent.com 修改为:raw.staticdn.net

e. 进入 C:/opencv_contrib-4.8.1/opencv_contrib-4.8.1/modules/face 目录, 修改 CMakeLists.txt, 将raw.githubusercontent.com 修改为: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 文件达到同样的效果。

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 库等等。

相关推荐
技术支持者python,php20 小时前
物体识别:分类器模型
人工智能·opencv·计算机视觉
雍凉明月夜20 小时前
视觉opencv学习笔记Ⅳ
笔记·opencv·学习·计算机视觉
棒棒的皮皮1 天前
【OpenCV】Python图像处理之图像表示方法
图像处理·python·opencv
棒棒的皮皮1 天前
【OpenCV】Python图像处理之通道拆分与合并
图像处理·python·opencv·计算机视觉
向上的车轮1 天前
图像处理OpenCV与深度学习框架YOLOv8的主要区别是什么?
图像处理·深度学习·opencv·yolov8
棒棒的皮皮1 天前
【OpenCV】Python图像处理之像素操作
图像处理·python·opencv
向上的车轮1 天前
基于深度学习与OpenCV的物体计数技术全解析
人工智能·深度学习·opencv
xrn19971 天前
Android OpenCV SDK 编译教程(WSL2 Ubuntu 22.04 环境)
android·c++·opencv
棒棒的皮皮2 天前
【OpenCV】Python图像处理之读取与保存
图像处理·python·opencv
棒棒的皮皮2 天前
【OpenCV】Python图像处理之特征提取
图像处理·python·opencv