win下 vscode下 C++和opencv的配置与使用

目录

vscode安装

cmake安装

opencv安装

mingw安装

编译opencv的minGW文件夹包

​编辑

[VScode配置和C++ demo](#VScode配置和C++ demo)

一些问题:

参考:


vscode安装

自行百度vs-code的安装,扩展中把中文,以及C/C++装上,也把cmake和cmake tool装上吧。网络不好或者不好安装的可以单独把.vsix下载了,用ctrl+shift+p打开Extension:Install from VSIX安装

cmake安装

https://cmake.org/files/v3.20/https://cmake.org/files/v3.20/ 这链接里边把cmake3.20下载了。比如我是下的:cmake-3.20.1-windows-x86_64.msi ,然后安装到D盘。 然后把D:\cmake3.20.1\bin添加到系统Path。然后cmd中cmake --version

opencv安装

https://opencv.org/releases/https://opencv.org/releases/ 这链接里边把opencv4.9.0下载了。 比如我是:opencv-4.9.0-windows.exe

opencv安装到D盘。 完了后需要关注一下: 是要有下边一些子文件夹的。

D:\opencv-4.9.0\opencv\build

D:\opencv-4.9.0\opencv\sources

D:\opencv-4.9.0\opencv\build\include\opencv2

D:\opencv-4.9.0\opencv\build\x64

这个x64文件夹里新建一个minGW,用来等会儿cmake编译opencv的包,于是便多了一个文件夹:

D:\opencv-4.9.0\opencv\build\x64\minGW

mingw安装

把mingW11.2.0下载了,要下这个格式:mingw-x86_64-11.2.0-release-posix-seh-rt_v9-rev0.7z ,win要有posix和seh之类的标识。具体为啥问一下豆包或者deepseek。下载方式有如下【链接可能会失效找不到了可能,多上网找找,能下载到一些mingw的比较新的版本就行】

https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/#

https://github.com/niXman/mingw-builds-binaries/releases

mingw解压到D盘,比如我,然后把D:\minGW11.2.0\mingw64\bin 配置到系统Path,然后cmd运行 gcc --version 和 g++ --version

编译opencv的minGW文件夹包

这里打开D:\cmake3.20.1\bin\cmake-gui.exe 然后配置opencv的source为D:/opencv-4.9.0/opencv/sources,和库的地方为D:/opencv-4.9.0/opencv/build/x64/minGW【刚刚新建那个minGW文件夹】,然后点左下角配置Configure

点了Configure后,按下边这样选:选mingw makefiles,Specify native compilers...

点了Next后,选minGW的gcc.exe和g++.exe,刚刚安装过的,也配置过Path的那个

然后,等待左下角等出现了第一个Configuring done,还要继续点下配置Configure。 有人说上边方框中,可以根据自己想要的去除勾等等,但是我怕出问题,没管。

继续,再次出现了Configuring done, 就可以点生成Generate了。

等最后出现了两个done,Configuring done和 Generating done。 就不管了。 去看看D:\opencv-4.9.0\opencv\build\x64\minGW有东西了没。

-------> 继续,重点才开始:----------------------->

在D:\opencv-4.9.0\opencv\build\x64\minGW文件夹下,打开cmd,开始编译opencv,分别执行两次命令: mingw32-make -j 8 和 mingw32-make install 前者成功后,才能执行后者。

最后应该是出如下的画面,就install成功了。

然后:

(1) 注意把 D:\opencv-4.9.0\opencv\build\x64\minGW\bin

D:\opencv-4.9.0\opencv\build\x64\minGW\lib 都配置到系统Path中。

(2)去看看这两个文件夹,应该有一堆opencv编译的minGW类型下的dll库了。

VScode配置和C++ demo

项目下 新建.vscode, 再新建launch.json和tasks.json

launch.json配置如下:

cpp 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ debug OpenCV", // 调试配置名,自定义
            "type": "cppvsdbg", // VS Code的调试类型(适配MinGW)
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 要运行的exe(和main.cpp同目录的main.exe)
            "args": [], // 运行exe时的参数(无则空)
            "stopAtEntry": false, // 调试时是否停在main函数入口(false=直接运行)
            "cwd": "${fileDirname}", // 工作目录(main.cpp所在目录)
            "environment": [],
            "externalConsole": true, // 调试时弹出独立的终端(必须,否则摄像头窗口可能卡死)
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\mingw11.2.0\\mingw64\\bin\\gdb.exe", // 你的gdb路径(MinGW自带)
            // "preLaunchTask": "g++ build OpenCV", // 调试前先执行的任务(对应tasks.json的label)
            "preLaunchTask": "g++ build OpenCV",  // 确保关联修正后的任务
            "setupCommands": [
                {
                    "description": "为gdb启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

tasks.json配置如下:

cpp 复制代码
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "g++ build OpenCV",
            "type": "shell",
            "command": "D:\\mingw11.2.0\\mingw64\\bin\\g++.exe", // 统一MinGW路径(和默认任务一致)
            "args": [
                "-g",
                "-std=c++17",  // 启用C++17(filesystem需要)
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                // 头文件路径:确认实际路径是opencv4.9.0还是opencv-4.9.0!
                "-I",
                "D:\\opencv-4.9.0\\opencv\\build\\include",
                // 库路径:修正大小写+统一路径前缀(无-)
                "-L",
                "D:\\opencv-4.9.0\\opencv\\build\\x64\\minGW\\lib",
                // 链接库(必须和lib目录下的文件名一致,如libopencv_core490.dll.a)
                "-lopencv_core490",
                "-lopencv_highgui490",
                "-lopencv_imgcodecs490",
                "-lopencv_imgproc490",
                "-lopencv_videoio490",
                "-lstdc++fs",  // 链接filesystem库
                "-static-libgcc",
                "-static-libstdc++"
            ],
            "group": {
                "kind": "build",
                "isDefault": true // 设为默认编译任务!
            },
            "problemMatcher": ["$gcc"],
            "detail": "编译OpenCV代码的任务"
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\mingw11.2.0\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": ["$gcc"],
            "group": {
                "kind": "build",
                "isDefault": false // 取消默认!
            },
            "detail": "调试器生成的任务。"
        }
    ]
}

项目目录下。**再新建一个CMakeLists.txt,**内容如下,但是后边我发现好像这个没用上?大模型告诉我的,也建着吧。。。

里边有一句:set(OpenCV_DIR "D:/opencv4.9.0/opencv/build/x64/minGW")

CMakeLists.txt如下:

cpp 复制代码
cmake_minimum_required(VERSION 3.10.0)
project(hello_opencv LANGUAGES CXX)

# 强制 C++11(OpenCV 4.x 必需)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 找到 OpenCV(指定你的 OpenCV 编译目录,避免自动找错)
set(OpenCV_DIR "D:/opencv4.9.0/opencv/build/x64/minGW")
find_package(OpenCV REQUIRED)

# 包含 OpenCV 头文件
include_directories(${OpenCV_INCLUDE_DIRS})

# 生成可执行文件(目标名:test11,对应源码 main.cpp)
add_executable(test11 main.cpp)

# 链接 OpenCV 库
target_link_libraries(test11 ${OpenCV_LIBS})

新建一个**main.cpp,**主要是opencv读一张图并显示。

main.cpp如下

cpp 复制代码
#include <opencv2/opencv.hpp>  // 包含OpenCV核心头文件
#include <iostream>             // 用于控制台输出

using namespace cv;            // 简化OpenCV命名空间
using namespace std;

int main() {
    // 1. 读取图片(替换为你的图片路径,支持jpg/png/bmp等格式)
    // IMREAD_COLOR:以彩色模式读取(忽略透明度);IMREAD_GRAYSCALE:灰度模式;IMREAD_UNCHANGED:保留透明度
    Mat img = imread("0_0.jpg", IMREAD_COLOR);

    // 2. 检查图片是否读取成功
    if (img.empty()) {
        cout << "错误:无法读取图片,请检查路径是否正确!" << endl;
        return -1;  // 读取失败,退出程序
    }

    // 3. 创建窗口(可选,imshow也会自动创建,但namedWindow可设置窗口属性)
    // WINDOW_NORMAL:允许调整窗口大小;WINDOW_AUTOSIZE:固定大小(默认)
    namedWindow("显示图片", WINDOW_NORMAL);

    // 4. 显示图片(参数:窗口名称,要显示的Mat对象)
    imshow("显示图片", img);

    // 5. 等待按键(单位:毫秒,0表示无限等待)
    // 必须加此函数,否则窗口会一闪而过
    waitKey(0);

    // 6. 释放窗口资源(可选,程序结束会自动释放)
    destroyAllWindows();

    cout << "图片宽度:" << img.cols << " 高度:" << img.rows << endl;
    return 0;
}

---- 调试:F5 【我没试过,应该打断点然后执行 问题不大】

---- 编译运行:ctrl+shift+B需要注意:搜狗颜文字 ctrl+shift+B冲突。搜狗S图标-常用设置-更多设置- 按键-"系统功能快捷键"-设置颜文字的勾选去掉。 编译运行成功,终端会出现:

bash 复制代码
正在执行任务: D:\mingw11.2.0\mingw64\bin\g++.exe -g -std=c++17 D:\0_VScodeProjects\hello_opencv\main.cpp -o D:\0_VScodeProjects\hello_opencv\main.exe -I D:\opencv-4.9.0\opencv\build\include -L D:\opencv-4.9.0\opencv\build\x64\minGW\lib -lopencv_core490 -lopencv_highgui490 -lopencv_imgcodecs490 -lopencv_imgproc490 -lopencv_videoio490 -lstdc++fs -static-libgcc -static-libstdc++ 
 *  终端将被任务重用,按任意键关闭。 

项目下会出现: main.exe

终端继续执行:./main.exe

**运行成功:(**有点乱码小问题,但问题不大)

一些问题:

(1)安装包和编译期间最好科学上网;

(2)如果opencv编译失败,那么可能是opencv和mingW和cmake 没有对上版本。 我之前也是问了豆包,豆包给了我本文档的他们的组合,编译出的D:\opencv-4.9.0\opencv\build\x64\minGW就没有问题了。总之,如果对版本没要求,多试试全都用最新版之类的~ 很多人是mingw32-make -j 8 和 mingw32-make install 这两步不成功,也可以单独去解决这两步了再来。

(3)vs-code中task.json之类的要配置opencv的路径正确,多检查!!!,vs-code跑C++基本的编译和运行这些要懂,我基本上是写python,也是踩了好多坑,甚至现在还要学习~

(4)我也是做了整个上述文档的过程,反正目前是成功了的。但不代表每个人照着来会成功,但是步骤基本就这么些了,有问题不放弃多跟大模型交流交流,一定会跑出来的~

参考:

参考了很多csdn和知乎,也都是文档这些事儿,主要参考视频为: https://m.bilibili.com/video/BV1Kt421b7Lo?spm_id_from=333.788.videopod.episodes&vd_source=bf1c62d0e7405278b11583856538ac2b&p=2

相关推荐
自己的九又四分之三站台2 小时前
基于OpenCV扶正扫描文件
人工智能·opencv·计算机视觉·c#
XXYBMOOO2 小时前
理解 C++ 中的字节序转换函数 `swapEndian`
开发语言·arm开发·c++
毕加锁3 小时前
深度解析昇腾Catlass:C++模板元编程与高性能算子开发范式(1)
开发语言·c++
却道天凉_好个秋3 小时前
OpenCV(四十六):OBR特征检测
人工智能·opencv·计算机视觉
你好音视频3 小时前
FFmpeg FLV编码器原理深度解析
c++·ffmpeg·音视频
Qt学视觉3 小时前
PaddlePaddle-2wget下载安装
c++·人工智能·paddlepaddle
老秦包你会3 小时前
C++进阶------C++的类型转换
java·开发语言·c++
superman超哥3 小时前
仓颉性能瓶颈定位方法深度解析
c语言·开发语言·c++·python·仓颉
weixin_404679313 小时前
vscode 配置cpp调试环境
数据库·ide·vscode·编辑器