使用MinGW-GCC编译OpenCV并在VSCode中引用进行开发(Windows)
0.前言
OpenCV(开源计算机视觉库:http://opencv.org)是一个开源库,包含数百种计算机视觉算法。它本质上是一个 C++ API,而不是基于 C 的 OpenCV 1.x API(自 OpenCV 2.4 发布以来,C API已被弃用,并且没有使用C编译器进行测试)。由于在Windows系统上OpenCV官方对于Visual Studio这个IDE的编译支持较为完善,而使用GCC的话则比较麻烦。因此,笔者尝试在本文中探讨如何在Windows系统上使用MinGW-GCC编译OpenCV并在VSCode中引用进行开发。注意:在Windows系统上使用OpenCV进行开发时,笔者仍然强烈推荐使用Visual Studio。使用GCC配合编辑器来进行OpenCV编译和开发过于繁琐,体感上并不强于安装笨重的Visual Studio再使用OpenCV。
笔者使用的平台和相关工具:
Win11、MinGW-GCC(15.2.0)、CMake(4.1.0)、VSCode
1.下载OpenCV源码并用GCC编译
①环境准备和依赖安装:打开 MSYS2 UCRT64 终端,更新系统并安装必要的开发工具和依赖库:
# 更新系统
pacman -Syu
# 如果提示关闭终端,请关闭后重新打开MSYS2 UCRT64,再次运行:
pacman -Su
# 安装编译工具链
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja git
# 安装OpenCV核心依赖
pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-eigen3 mingw-w64-ucrt-x86_64-openblas
# 安装GUI支持依赖 (GTK3)
pacman -S mingw-w64-ucrt-x86_64-gtk3
# 安装视频和图像编解码库
pacman -S mingw-w64-ucrt-x86_64-ffmpeg mingw-w64-ucrt-x86_64-libjpeg-turbo mingw-w64-ucrt-x86_64-libpng mingw-w64-ucrt-x86_64-libtiff mingw-w64-ucrt-x86_64-libwebp mingw-w64-ucrt-x86_64-openjpeg2
# 安装Fortran编译器(解决CMake配置错误)
pacman -S mingw-w64-ucrt-x86_64-gcc-fortran
# 安装解压工具(解压OpenCV源码)
pacman -S umzip
②下载OpenCV源代码,在 MSYS2 UCRT64 终端中执行:
# 进入家目录
cd ~
# 下载OpenCV 4.12.0 源代码
wget -O opencv-4.12.0.zip https://codeload.github.com/opencv/opencv/zip/refs/tags/4.12.0
unzip opencv-4.12.0.zip
# 下载OpenCV贡献模块源代码
wget -O opencv_contrib-4.12.0.zip https://codeload.github.com/opencv/opencv_contrib/zip/refs/tags/4.12.0
unzip opencv_contrib-4.12.0.zip
③编译与安装OpenCV:
#创建构建目录并进入:
mkdir -p ~/build-opencv-ucrt
cd ~/build-opencv-ucrt
#运行CMake进行配置:
cmake -G "Ninja" \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/ucrt64 \
-DBUILD_SHARED_LIBS=ON \
-DOPENCV_EXTRA_MODULES_PATH=/home/$(whoami)/opencv_contrib-4.12.0/modules \
-DWITH_GTK=ON \
-DWITH_FFMPEG=ON \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_apps=OFF \
~/opencv-4.12.0
# 这一过程耗时较长
#开始编译(根据CPU核心数调整-j参数):
ninja -j$(nproc)
# 或指定核心数,例如:ninja -j8
# 这一过程耗时很长
#安装到系统目录:
ninja install
#验证安装:
# 检查库文件
ls /ucrt64/x64/mingw/lib/libopencv*
# 检查头文件
ls /ucrt64/include/opencv2/
# 检查版本
cat /ucrt64/include/opencv2/core/version.hpp | grep "CV_VERSION_"
2.创建VS Code项目并配置
①创建项目目录结构:
helloopencv/
├── .vscode/
│ ├── tasks.json
│ └── launch.json
├── src/
│ └── main.cpp
└── test_image.jpg (测试图片)
②输入测试代码 src/main.cpp:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
cv::Mat image = cv::imread("test_image.jpg"); // 从项目根目录读取图片
if(image.empty()) {
std::cout << "Could not open or find the image!" << std::endl;
return -1;
}
cv::namedWindow("Hello OpenCV", cv::WINDOW_AUTOSIZE);
cv::imshow("Hello OpenCV", image);
cv::waitKey(0);
cv::destroyAllWindows();
std::cout << "OpenCV test completed successfully!" << std::endl;
return 0;
}
③配置 tasks.json(用于编译):
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build Hello OpenCV (UCRT64)",
"command": "D:/msys64/ucrt64/bin/g++.exe", // 注意根据自己的 MSYS2 的安装位置进行修改
"args": [
"-fdiagnostics-color=always",
"-g",
"-std=c++17",
"${workspaceFolder}/src/main.cpp",
"-o", "${workspaceFolder}/build/helloopencv.exe",
"-LD:/msys64/ucrt64/x64/mingw/lib", // 注意根据自己的 MSYS2 的安装位置进行修改
"-lopencv_core4120",
"-lopencv_highgui4120",
"-lopencv_imgcodecs4120",
"-lopencv_imgproc4120",
"-lopencv_videoio4120"
],
"options": {
"cwd": "${workspaceFolder}" // 工作目录设置为项目根目录
},
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
}
]
}
④配置launch.json(用于调试):
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch Hello OpenCV",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/helloopencv.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}", // 工作目录设置为项目根目录
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:/msys64/ucrt64/bin/gdb.exe", // 注意根据自己的 MSYS2 的安装位置进行修改
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build Hello OpenCV (UCRT64)" // 调试前先编译
}
]
}
⑤将相关的DLL文件:libopencv_core4120.dll、libopencv_highgui4120.dll、libopencv_imgcodecs4120.dll、libopencv_imgproc4120.dll、libopencv_videoio4120.dll从D:\msys64\ucrt64\x64\mingw\bin(动态链接库的库目录)路径复制到D:\projects\helloopencv\build(项目目录下的build文件夹,也就是.exe文件生成的位置),否则调试时会报错(因为找不到所需的DLL文件)。(这两个目录也要注意根据自己的 MSYS2 的安装位置和项目所在位置进行修改。)
⑥之后摁F5,选择(gdb) Launch Hello OpenCV,就可以开始编译并调试了。
3.结语
现在我们已经成功实现在Windows系统上使用MinGW-GCC编译OpenCV并在VSCode中引用进行开发了。各位读者可以关注一下笔者的微信公众号:江澜的代码空间,在CSDN上发表的文章也会在上面同步发表,在微信公众号上还会不定期分享自己的随笔与生活感悟,谢谢~
更多推荐


所有评论(0)