Vscode配置opencv C++环境

一、系统环境及资源准备

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博客

CMake Documentation and Community

OpenCV - 提出 OpenCV 问题,获取 OpenCV 答案

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值