MinGW-w64 编译 OpenCV 过程记录

MinGW-w64 编译 OpenCV 过程记录

Coast23

准备

确保已具有:

  1. MinGW-w64(或其它 C++ 编译器)
  2. CMake
  3. OpenCV src

在终端键入 g++ -v 确认有 MinGW-w64 环境,键入 cmake --version 确认有 CMake 环境。请确保正确下载了 OpenCV 源码,找个干净目录 git clone https://gh-proxy.com/github.com/opencv/opencv.git 下来即可。

确认所需模块

根据项目需求确定所需模块,就我自己而言,所需要的功能与对应模块如下:

功能模块
基础结构core
图像变换imgproc
图像读写imgcodecs
视频读取videoio
imshowhighgui

有一个需要考虑的选项:BUILD_opencv_world。默认情况下,OpenCV 是模块化构建,一个模块一个库。这样在项目编译链接的时候就需要指定所有的模块,即加上这些编译选项:

-lopencv_core
-lopencv_imgproc
-lopencv_objdetect
-lopencv_videoio
-lopencv_highgui

但是,如果启用了 BUILD_opencv_world,则会生成一个聚合库,包含了所有启用的模块,就只需要:

-lopencv_world

缺点是体积增大。

因为我不喜欢有一堆模块,所以我启用了 BUILD_opencv_world(默认关闭)。

  • 我的选择仅供参考,请根据你的具体需求选择需要的模块和选项。

生成 Makefile

可以用命令行,或用 CMake-GUI,两种做法挑一种就行。这里推荐用命令行。

命令行

  • 进入 OpenCV 源码目录,创建存放结果的 build 目录并进入:
cd E:\opencv-4.12.0
mkdir build
cd build
  • 先挂个梯子(涉及 GitHub 上文件的下载),然后在 powershell 中键入如下命令(视需求更改相应选项):
cmake -G "MinGW Makefiles" `
-DCMAKE_BUILD_TYPE=Release `
-DBUILD_SHARED_LIBS=ON `
-DBUILD_opencv_world=ON `
"-DBUILD_LIST=core,imgproc,imgcodecs,videoio,highgui" `
-DBUILD_TESTS=OFF `
-DBUILD_PERF_TESTS=OFF `
-DBUILD_EXAMPLES=OFF `
-DBUILD_DOCS=OFF `
-DWITH_IPP=OFF `
-DWITH_MSMF=OFF `
-DWITH_DSHOW=OFF `
-DWITH_OPENCL=OFF `
-DWITH_TBB=OFF `
..

如果使用 cmd,那就把续行符从 ` 换成 ^,或者改用下面的单行命令:

cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DBUILD_opencv_world=ON "-DBUILD_LIST=core,imgproc,imgcodecs,videoio,highgui" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=OFF -DWITH_IPP=OFF -DWITH_MSMF=OFF -DWITH_DSHOW=OFF -DWITH_OPENCL=OFF -DWITH_TBB=OFF ..

需要等一会儿。

如果发现下载失败:

-- FFMPEG: Downloading opencv_videoio_ffmpeg_64.dll from https://raw.githubusercontent.com/opencv/opencv_3rdparty/ea9240e39bc0d6a69d2b1f0ba4513bdc7612a41e/ffmpeg/opencv_videoio_ffmpeg_64.dll
-- Try 1 failed
CMake Warning at cmake/OpenCVDownload.cmake:251 (message):
FFMPEG: Download failed: 28;"Timeout was reached"

For details please refer to the download log file:

E:/opencv-4.12.0/build/CMakeDownloadLog.txt

Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
modules/videoio/cmake/detect_ffmpeg.cmake:17 (download_win_ffmpeg)
modules/videoio/cmake/init.cmake:7 (include)
modules/videoio/cmake/init.cmake:11 (add_backend)
cmake/OpenCVModule.cmake:298 (include)
cmake/OpenCVModule.cmake:361 (_add_modules_1)
cmake/OpenCVModule.cmake:408 (ocv_glob_modules)
CMakeLists.txt:1096 (ocv_register_modules)

手动下载,然后拷贝进对应目录,比如这个就要放到 build\3rdparty\ffmpeg\ 下。应确保具备所有第三方依赖项。

CMake-GUI

懒得从头到尾自己写一遍了,可以先参考这篇文章

这里讲一下上面这篇文章里没讲的。我们需要自己设置 BUILD_LIST

  • 点击 Add Entry 按钮;
  • Name:填入 BUILD_LIST
  • Type:选择 STRING
  • Value:填入 core,imgproc,imgcodecs,videoio,highgui(根据你的需求填写);
  • Description:随便写,直接放空吧。

如果要启用 BUILD_opencv_world,就搜索一下,勾上即可。

其它项同理,参考命令行部分的命令选项进行勾选。

编译

  • 在终端(build 目录里)键入如下命令:
mingw32-make -j8

8 是线程数,根据你的 CPU 线程数(用命令 wmic cpu get NumberOfLogicalProcessors 查看)调整。

编译需要一定时间,请坐和放宽。(我 32 线程 2 分钟就编译完了)

报一堆 Warning 是正常现象,忽视即可。

  • 安装。编译完成后,键入如下命令安装:
mingw32-make install

结束后,build 目录下又会出现一个 install 目录,里面就是编译好的 OpenCV 库。

设置 Include Path

以 VSCode 的 C++ 扩展为例。在扩展设置里找到 Include Path 设置项,新建 ...\build\install\include 条目,如下图所示。

1

然后,就可以在 VSCode 里愉快使用 OpenCV 库了。

  • 标题: MinGW-w64 编译 OpenCV 过程记录
  • 作者: Coast23
  • 创建于 : 2026-02-24 12:38:50
  • 更新于 : 2026-02-24 20:23:33
  • 链接: https://coast23.github.io/2026/02/24/MinGW-w64-编译-OpenCV-过程记录/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论