一、系统环境及资源准备
1、系统环境:Windows11
2、资源准备:
需要的资源有MinGw64、opencv、Vscode、Cmake;除Vscode需要下载软件以外,其他的均可以下载压缩包,解压即可,不过本文为了方便读者,尽量使用官方软件无脑式配置,MinGw64选择直接下载压缩包。
MinGw64下载:
MinGw64下载地址:MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net
打开上面的网站,找到Files栏目,选择如下图红框内的文件夹
这里有很多版本选择,可以根据需要选择相应的版本,我们选用8.1.0版本
直接下载压缩包,然后解压,我们这里选择在C盘创建一个文件夹:Mingw,我们解压到Mingw文件夹内
Opencv下载:
Opencv我们选择到官网下载:Releases - OpenCV
我们选择opencv-4.5.3-vc14_vc15版本,选择Windows版本下载
下载完成后打开安装即可(为了避免后续文件丢失,可以在安装的时候给网络加加速),选择安装路径,我选择的是在C盘里创建一个opencv文件夹,即安装路径为C:\opencv,然后点击Extract,自动完成安装。
安装完成后,C盘文件夹内如下图
Cmake下载:
Cmake官网下载:Download CMake
Cmake版本我选择的是cmake-3.30.2-windows-x86_64,选择下载如图红框,msi表示安装程序,zip表示为压缩包,我选择下载后缀为msi的文件。下载完成后安装到C盘
安装完成后在C盘可以看到
Cmake会自动配置环境变量,如果没有勾选自动配置环境变量可以参考下一章,安装完成后会在桌面出现一个cmake-gui的图标,如果桌面没有,可以到开始菜单栏搜索cmake;
Vscode下载:
Vscode官网下载:Visual Studio Code - Code Editing. Redefined
下载安装即可。
安装完成后如果需要将 VSCode 设置为中文界面,可以通过以下步骤操作:
1. 打开命令面板(使用快捷键 Ctrl+Shift+P 或 Command+Shift+P)。
2. 输入 Configure Display Language 并选择该命令。
3. 在弹出的列表中选择 zh-cn(简体中文)。
4. 重启 VSCode 以应用更改。
好了,接着配置,需要在Vscode的扩展商店里安装如图所示扩展插件
二、环境变量
上述软件及压缩包下载安装好之后需要添加环境变量,打开设置,找到系统-系统信息-高级系统设置-环境变量-系统变量/用户变量-path
双击上图红框内的path,如下图,选择新建,将opencv,mingw,cmake的bin文件夹路径添加到下面的path环境变量中。
我这边MinGwd的bin路径为:C:\MinGw\mingw64\bin
Cmake的bin路径为:C:\CMake\bin
Opencv的bin路径为:C:\opencv\opencv\build\x64\cv\bin
C:\opencv\opencv\build\x64\vc14\bin
C:\opencv\opencv\build\x64\vc15\bin
(注意:opencv的环境变量需等到编译完成后添加,如果读者依据文章顺序操作至此,请暂停opencv的环境变量添加,后文会说明何时添加)
三、Opencv编译:
打开Cmake-gui,在第一栏文件路径选择opencv中的sources文件夹,我的路径是:C:/opencv/opencv/sources,然后第二栏选择将编译文件所存放的文件夹位置,我在C:/opencv/opencv/build/x64/中新建了一个cv文件夹,所以我的文件路径是C:/opencv/opencv/build/x64/cv,(为了避免后续文件丢失,可以在此时给网络加加速)
之后点击Configure,弹出如下图所示,跟着图片选择,然后Next
在下图的界面中,第一栏选择MinGw中bin文件夹下的gcc.exe,C++选择bin文件夹下的g++.exe,因为我的MinGw放在C盘,所以我的路径为:C:/MinGw/mingw64/bin/gcc.exe,以及C:/MinGw/mingw64/bin/g++.exe,然后点击Finish。再点击Configure
之后会出现一堆爆红的,如图,我们需要把关于python的都给取消勾选,如:BUILD_PYTHON3_SUPPORT、INSTALL_PYTHON_EXAMPLES。勾选BUILD_opencv_world,WITH_OPENGL和BUILD_EXAMPLES,不勾选WITH_IPP、WITH_MSMF和ENABLE_PRECOMPILED_HEADERS(如果有的话),CPU_DISPATCH选空。
再次点击Configure,配置完成没有爆红且显示,之后点击Generate,最后显示如下图,则表示配置完成。
此时可以进行opencv的环境配置,参考上文
之后进行编译,找到之前所新建的cv文件夹,如果读者所建文件夹名称不是cv,可以将cv换成你所命名的文件夹,我这边的路径是C:\opencv\opencv\build\x64\cv,在该路径下打开cmd,如图所示界面右键,选择在终端打开。
打开之后如下图,输入mingw32-make -j 4 ,然后回车,即可编译
编译成功后会显示如下图,如果失败的话可能是因为网络问题导致opencv某些配置文件没有下载完成,也有是因为版本的问题,目前寻找了许多方法,如重新下载如下图所示文件即可解决,或者在安装opencv以及使用cmake-gui的时候调整一下网络,加加速,也可以解决。
成功后在终端输入命令:mingw32-make install,然后回车,如图,之后会生成一个install文件夹,我的目录为:C:\opencv\opencv\build\x64\cv\install
到这里,基本配置就完成了
四、Vscode配置
需要进行3个json文件的配置
c_cpp_properties.json:
{
"configurations": [
{
"name": "win",
"includePath": [
"${workspaceFolder}/**",
"C:/opencv/opencv/build/x64/cv/install/include",//根据自己的目录修改
"C:/opencv/opencv/build/x64/cv/install/include/opencv2"//根据自己的目录修改
],
"defines": [],
"compilerPath": "C:\\MinGw\\mingw64\\bin\\g++.exe",//根据自己的目录修改
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "${default}"
}
],
"version": 4
}
launch.json:
launch.json里需要修改的是miDebuggerPath
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
"cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
"environment": [], // 环境变量
"externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
"MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。
"miDebuggerPath": "C:/MinGw/mingw64/bin/gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要,根据自己的目录修改
"setupCommands": [
{ // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "OpenCV_Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
}]
}
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "opencv4.5.3", // 任务名称,与launch.json的preLaunchTask相对应
"command": "C:/MinGw/mingw64/bin/g++.exe", // 要使用的编译器,C++用g++,改成自己的目录
"args": [
"${file}",//当前文件名
"-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
"${fileDirname}\\spk\\${fileBasenameNoExtension}.exe",//spk为exe文件所存放的文件夹名
"-g", // 生成和调试有关的信息
"-m64", // 不知为何有时会生成16位应用而无法运行,加上此条可强制生成64位的
"-Wall", // 开启额外警告
"-static-libgcc", // 静态链接libgcc,一般都会加上
"-finput-charset=UTF-8",
"-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这条会导致Win下输出中文乱码;繁体系统改成BIG5
"-std=c++17", // 要用的语言标准,根据自己的需要修改。
// 扩展参数
// -I 头文件目录
// -L 库文件目录
// -l 库文件
"-I", "C:/opencv/opencv/build/x64/cv/install/include",//
"-I", "C:/opencv/opencv/build/x64/cv/install/include/opencv2",//
"-L", "C:/opencv/opencv/build/x64/cv/bin",//改成自己的目录
"-l", "libopencv_calib3d453",
"-l", "libopencv_core453",
"-l", "libopencv_dnn453",
"-l", "libopencv_features2d453",
"-l", "libopencv_flann453",
"-l", "libopencv_gapi453",
"-l", "libopencv_highgui453",
"-l", "libopencv_imgcodecs453",
"-l", "libopencv_imgproc453",
"-l", "libopencv_ml453",
"-l", "libopencv_objdetect453",
"-l", "libopencv_photo453",
"-l", "libopencv_stitching453",
"-l", "libopencv_video453",
"-l", "libopencv_videoio453",
], // 编译的命令,其实相当于VSC帮你在终端中输了这些东西
"type": "process", // process是把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍
"group": {
"kind": "build",
"isDefault": true // 不为true时ctrl shift B就要手动选择了
},
"presentation": {
"echo": true,
"reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档
"focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义
"panel": "shared" // 不同的文件的编译信息共享一个终端面板
},
"problemMatcher":"$gcc" // 捕捉编译时终端里的报错信息到问题面板中,修改代码后需要重新编译才会再次触发
// 本来有Lint,再开problemMatcher就有双重报错,但MinGW的Lint效果实在太差了;用Clang可以注释掉
}]
}
二进制文件放置:
需要将libopencv_world453.dll和opencv_videoio_ffmpeg453_64.dll两个文件放置在项目文件夹下,即main.cpp所在文件夹内如
main.cpp:
#include <opencv2/opencv.hpp>
#include <iostream>
#include <locale>
#include <codecvt>
int main() {
// 设置控制台输出编码为 UTF-8
std::locale::global(std::locale(""));
// 读取图像
cv::Mat image = cv::imread("222.jpg");
if (image.empty()) {
std::cerr << "读取图像失败" << std::endl;
return -1;
}
std::cout << "图像读取成功" << std::endl;
// 显示图像
cv::imshow(u8"原图", image);
// 转换为灰度图
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
// 显示灰度图
cv::imshow(u8"灰度图", gray);
// 等待用户按键
cv::waitKey(0);
// 关闭所有窗口
cv::destroyAllWindows();
return 0;
}
五、测试:
运行之后如下图
六、资料参考来源:
VScode搭建Opencv(C++开发环境)_vscode opencv-CSDN博客
在VSCode中配置OpenCV的C++环境(Windows11)-CSDN博客
2024:VsCode中配置opencv(C++)_vscode opencv-CSDN博客
Windows下编译opencv&opencv_contrib(避坑版)_opencv windows编译-CSDN博客