Windows下适用于MinGW的OpenCV编译安装以及在VSCode中的使用

系统与软件版本
- Windows 10 21H2 19044.2130
- GNU version 12.2.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
- Cmake version 3.25.0-rc2
- OpenCV version 4.6.0
安装前准备
- 检查
MinGW
的安装版本是否为posix
线程标准,目前OpenCV
只支持posix
标准,不支持win32
标准 - 安装Windows版本的
Cmake
,官网链接为https://cmake.org/download/,一般选择 Windows x64 Installer 下载安装即可
下载与编译OpenCV源码
前往OpenCV官网下载
OpenCV
源代码,由于官网预编译好的只有vs15与vs14适用的版本,这里我们选择源码Sources
进行下载(由于我使用的GCC版本为12.2.0,只有4.6.0版本的OpenCV支持);
将下载好的源代码解压;
选择解压后的opencv源码路径与编译二进制文件的路径,一般就选择源码路径下的build文件夹(Cmake会提醒创建,也可以自己提前创建),点击
Configure
;
选择MinGW Makefiles,如果对应的GNU编译器(包括gcc、g++、gfortran)已经在当前的环境变量PATH中,则可以选择默认的编译器,如下图所示;如果未添加进环境变量,可以选择
Specify native compilers
手动选择(不推荐,建议添加环境变量);
等待Configure完成后,出现需要更新的红色的配置值,可以根据自己的需要进行适当调整,例如
- 如果不需要Python与Java等,可以取消选择相关的选项
BUILD_opencv_python3
、BUILD_JAVA
, - 如果需要改变安装路径,可以修改
CMAKE_INSTALL_PREFIX
,默认安装路径为build/install
, - 如果希望将所有编译后的库文件整合为一个,可以开启
BUILD_opencv_world
选项,再次点击Configure
;
- 如果不需要Python与Java等,可以取消选择相关的选项
等待Configure完成后,点击
Generate
;在命令行中打开
build
目录,进行编译mingw32-make
这一步需要较长时间,根据电脑性能不同可能从10分钟到2个小时不等,可以添加
-j
选项使用多线程编译加快速度(但不一定稳定);
编译完成后,安装OpenCV,安装路径即为第6步中
CMAKE_INSTALL_PREFIX
的路径;mingw32-make install
OpenCV的使用以及在VSCode中的配置
创建一个测试文件
test_cv.cpp
;#include <opencv2/opencv.hpp> using namespace cv; int main() { Mat img = imread("F:/EasyCoding/Cpp/circuit.png"); imshow("4K", img); waitKey(0); return 0; }
在命令行中使用
g++
进行编译,需要-I
指定头文件搜索路径、-L
指定函数库搜索路径、-l
链接函数库,因此,若要使用OpenCV编译C++文件,指令需如下所示(注意链接的函数后面的数字指代OpenCV版本,需要依据不同的版本进行更换);g++.exe -g .test_cv.cpp -o .test_cv.exe -I E:SDKopencv-4.6.0buildinstallinclude -L E:SDKopencv-4.6.0buildinstallx64minglib -l libopencv_calib3d460 -l libopencv_core460 -l libopencv_dnn460 -l libopencv_features2d460 -l libopencv_flann460 -l libopencv_gapi460 -l libopencv_highgui460 -l libopencv_imgcodecs460 -l libopencv_imgproc460 -l libopencv_ml460 -l libopencv_objdetect460 -l libopencv_photo460 -l libopencv_stitching460 -l libopencv_video460 -l libopencv_videoio460
若在编译OpenCV的第六步中选择了
BUILD_opencv_world
选项,则可简化命令为g++ -g .test_cv.cpp -o .test_cv.exe -I E:SDKopencv-4.6.0buildinstallinclude -L E:SDKopencv-4.6.0buildinstallx64mingwlib -l libopencv_world460
在VSCode中为OpenCV库的代码添加代码提示与函数跳转
- 首先需要安装
C/C++
插件 - 然后
{Ctrl}
+{Shift}
+{p}
打开命令面板,输入Edit Configurations
,选择第一个
- 在包含路径一栏中添加
include/**
路径,最终的c_cpp_properties.json
如下所示(仅供参考){ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "E:/SDK/opencv-4.6.0/build/install/include/**" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "windowsSdkVersion": "10.0.22621.0", "compilerPath": "E:/SDK/MinGW/gnu_x64-12.2.0-posix-seh-rt_v10-rev0/bin/gcc.exe", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-gcc-x64" } ], "version": 4 }
- 首先需要安装
使用
C/C++
插件编译依赖OpenCV库的程序时,我们无需修改launch.json
文件,只需在task.json
中如第2步所示添加编译选项,最终任务配置如下所示(仅供参考,注意label
与launch.json
中的preLaunchTask
一致){ "type": "shell", "label": "g++.exe build active file", "command": "E:/SDK/MinGW/gnu_x64-12.2.0-posix-seh-rt_v10-rev0/bin/g++.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}\${fileBasenameNoExtension}.exe", "-I", "E:/SDK/opencv-4.6.0/build/install/include", "-L", "E:/SDK/opencv-4.6.0/build/install/x64/mingw/lib", "-l", "libopencv_calib3d460", "-l", "libopencv_core460", "-l", "libopencv_dnn460", "-l", "libopencv_features2d460", "-l", "libopencv_flann460", "-l", "libopencv_gapi460", "-l", "libopencv_highgui460", "-l", "libopencv_imgcodecs460", "-l", "libopencv_imgproc460", "-l", "libopencv_ml460", "-l", "libopencv_objdetect460", "-l", "libopencv_photo460", "-l", "libopencv_stitching460", "-l", "libopencv_video460", "-l", "libopencv_videoio460", ], "options": { "cwd": "E:/SDK/MinGW/gnu_x64-12.2.0-posix-seh-rt_v10-rev0/bin" }, "group": { "kind": "build", "isDefault": true } }
若在编译OpenCV的第六步中选择了
BUILD_opencv_world
选项,则可简化配置为(仅供参考,注意label
与launch.json
中的preLaunchTask
一致){ "type": "shell", "label": "g++.exe build active file", "command": "E:/SDK/MinGW/gnu_x64-12.2.0-posix-seh-rt_v10-rev0/bin/g++.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}\${fileBasenameNoExtension}.exe", "-I", "E:/SDK/opencv-4.6.0/build/install/include", "-L", "E:/SDK/opencv-4.6.0/build/install/x64/mingw/lib", "-l", "libopencv_world460", ], "options": { "cwd": "E:/SDK/MinGW/gnu_x64-12.2.0-posix-seh-rt_v10-rev0/bin" }, "group": { "kind": "build", "isDefault": true } }
使用
CodeRunner
插件编译依赖OpenCV库的程序,与第2步中相同,只需要在设置中code-runner.executorMap
选项中cpp
的部分中添加相关参数即可,这里不再赘述。