Windows系统 CMake + mingw 编译 OpenCV

@TOC

<math xmlns="http://www.w3.org/1998/Math/MathML"> O . 总述 : 如有疑问可留言沟通交流 O. 总述:^{如有疑问可留言沟通交流} </math>O.总述:如有疑问可留言沟通交流

给定源代码,通过 cmake 和 mingw 完成编译:

  • cmake 用于在 目标文件夹 生成Makefiles等配置文件。
  • mingw 根据Makefiles等配置文件进行源代码的编译。

本文所涉及的文件目录

标题 所在位置
cmake D:\vscode\cmake-3.27.3\
mingw D:\vscode\mingw64-posix-seh\
opencv源代码文件夹 D:\OpenCV4.8.0\opencv\sources\
opencv编译文件夹 D:\OpenCV4.8.0\bin\

<math xmlns="http://www.w3.org/1998/Math/MathML"> Ⅰ . 下载安装 : 如有疑问可留言沟通交流 Ⅰ. 下载安装:^{如有疑问可留言沟通交流} </math>Ⅰ.下载安装:如有疑问可留言沟通交流

$Ⅰ.1 获取 cmake

cmake 各版本下载地址:Download | CMake

版本 下载链接 说明
Windows x64 Installer: cmake-3.27.3-windows-x86_64.msi 安装包,可针对性的选择属性,例如添加环境变量
Windows x64 ZIP cmake-3.27.3-windows-x86_64.zip 免安装,需自行添加环境变量

建议下载压缩包 Windows x64 ZIP ,解压、添加环境变量

$Ⅰ.2 获取 mingw

MinGW 各版本下载地址:Downloads - MinGW-w64

MinGW-w64 - for 32 and 64 bit Windows:MinGW-w64 - for 32 and 64 bit Windows download
建议下载压缩包 x86_64-posix-seh,解压、添加环境变量

MinGW 各版本参数 (Version、Architecture、Threads、Exception) 说明

  • Version:指的是 GCC 编译器的版本,我选择的是当前最新版本 8.1.0,一般建议选择最新的版本;
  • Architecture:指的是电脑的系统类型,i686 表示的是 32 位的系统类型,x86_64 表示的是 64 位的系统类型;
  • Threads:指的是线程模型,posix 或 win32
    • POSIX(Portable Operating System Interface,可移植操作系统接口),是 UNIX 系统的一个 API 设计标准,很多类 UNIX 系统也在支持兼容这个标准,如 Linux 操作系统。如果在 Windows 下开发 Linux 应用程序,则选择 posix;
    • Win32,是 Windows 系统下一个 API 设计标准,如果开发 Windows 平台下的应用程序,就需要选择 Win32;
  • Exception:指的是异常处理模型。i686 系统架构有两种选择:dwarf 和 sjlj;x86_64 系统架构也有两种选择:seh 和 sjlj。

sjlj,seh,dwarf 三者的区别

在C++中有 try...throw...catch,当它执行这种结构时,它需要保存现场还原现场,而 sjlj,seh,dwarf 正是实现这类过程的三种方式。

  • sjlj 全称是 SetJump / LongJump,前者设还原点,后者跳到还原点。可用于 32 位或者 64 位系统

  • seh(Structured Exception Handling,结构化异常处理)是 Borland 公司的,微软买了其专利使用权,它利用了 FS 段寄存器,将还原点压入栈,收到异常时再弹出。相较而言,sjlj 是 C 标准库就有的东西,seh 在 2014 年前是有专利的,从性能上说 seh 比 sjlj 快。只用于64位系统

  • dwarf 只支持32位系统 -- 没有永久的运行时间开销 -- 需要整个调用堆栈被启用,这意味着exception不能被抛出,例如Windows系统DLL。

综上所述:

【x86_64 64位】

1、seh 是新发明的,性能比较好,但不支持 32位。

2、而 sjlj 则是古老的。只用于64位系统。

3、sjlj 稳定性好,支持 32位和64位。

因此,x86_64 系统架构的推荐使用 seh 的异常处理模型。

【i686 32位】

1、dwarf 只支持 32 位,但是 dwarf 的性能要优于 sjlj。

2、sjlj 支持 32 位或64 位,

因此,i686 系统架构的推荐使用 dwarf 的异常处理模型。

$Ⅰ.3 获取 opencv

opencv 各版本下载地址:Tags · opencv/opencv

opencv-contrib 各版本下载地址:Tags · opencv/opencv_contrib

上面两个都可以,zip是源代码;exe里面包含已经编译好的vc版本和源代码。
建议下载压缩包 Source code(zip) ,解压

下载解压完事儿之后确认存在环境变量:
D:\vscode\mingw64-posix-seh\bin
D:\vscode\cmake-3.27.3\bin

<math xmlns="http://www.w3.org/1998/Math/MathML"> Ⅱ . 配置、编译 : 如有疑问可留言沟通交流 Ⅱ. 配置、编译:^{如有疑问可留言沟通交流} </math>Ⅱ.配置、编译:如有疑问可留言沟通交流

Ⅱ.1 配置编译项

Ⅱ.1.1 配置 - configure

选择 源代码文件夹、生成二进制文件的编译文件夹,并勾选 Advanced 复选框:

源代码文件夹 D:\OpenCV4.8.0\opencv\sources
编译文件夹 D:\OpenCV4.8.0\bin

指定 该项目的生成器 makefile 版本 为 MinGW Makefiles (及其gcc、g++所处位置)。

gcc、g++所处位置 D:\vscode\mingw64-posix-seh\bin

CMake 配置 OpenCV 编译项 期间会出现多条红色标注的关键项 (注意这不是报错):

想知道这些标红的选项代表什么,可以查阅下表;刨根问底 可以参考文章:

  1. OpenCV: OpenCV configuration options reference
  2. OpenCV 配置选项参考文档

选项命名规范

用于控制依赖库的选项有三种,分别有不同的前缀:

  • BUILD_:是否启用与 OpenCV 捆绑的第三方库的构建与使用
  • HAVE_:表明此依赖是否被启用,当自动检测无法使用时,可以用于手动启用一个依赖
  • WITH_:是否启用(enable or disable)此依赖

当一个 WITH_ 选项被 启用 时,有:

  • 如果 相应的 BUILD_ 选项也被启用,第三方库被构建并启用 => 相应的 HAVE_ 选项值会被设置为 ON
  • 如果 相应的 BUILD_ 选项被禁用,会检测第三方库,如果第三方库被找到则被启用 => 如果找到了依赖则相应的 HAVE_ 选项值会被设置为 ON

里面有几条常用的选项:

选项 描述
WITH_CUDA 异构计算,对 CUDA 的支持(默认未勾选:未启用此依赖);类似的其他选项: WITH_CUFFT, WITH_CUBLAS, WITH_NVCUVID
WITH_OPENCL 异构计算,对 OpenCL 的支持(默认已勾选);其他选项:WITH_OPENCL_SVMWITH_OPENCLAMDFFTWITH_OPENCLAMDBLASWITH_OPENCL_D3D11_NVWITH_VA_INTEL
WITH_JASPER 图像读写,对 JPEG2000 with JasPer 的支持(默认已勾选)
WITH_JPEG 图像读写,对 JPEG 的支持(默认已勾选)
WITH_OPENJPEG 图像读写,对 JPEG2000 with OpenJPEG 的支持(默认已勾选)
WITH_PNG 图像读写,对 PNG 的支持(默认已勾选)
WITH_TIFF 图像读写,对 TIFF 的支持(默认已勾选)
WITH_WEBP 图像读写,对 WEBP 的支持(默认已勾选)
WITH_OPENEXR 图像读写,对 EXR 的支持(默认勾选)
WITH_IMGCODEC_HDR 图像读写,对 HDR 的支持(默认已勾选)
WITH_IMGCODEC_PXM, WITH_IMGCODEC_PFM 图像读写,对 PPM, PGM, PBM, PFM 的支持(默认已勾选)
WITH_IMGCODEC_SUNRASTER 图像读写,对 Sun Raster 的支持(默认已勾选)
WITH_GDAL 图像读写,GDAL 集成(默认未勾选)GDAL 是一个更高级别的库,支持读取多种文件格式,包括 PNG、JPEG 和 TIFF。
WITH_GDCM 图像读写,GDCM 集成(默认未勾选) 通过 GDCM 库启用 DICOM 医学图像格式支持。
VIDEOIO_ENABLE_PLUGINS 图像读写,插件支持(默认已勾选)从 CV 4.1.0 版本开始,一些 videoio 后端可以构建为插件,从而打破对第三方库的严格依赖,并使它们在运行时成为可选项。
VIDEOIO_PLUGIN_LIST 图像读写,插件列表(默认为空)要编译为插件的后端名称的列表,使用逗号或分号分隔。支持的名称有 ffmpeggstreamermsmfmfxall
WITH_AVFOUNDATION 视频读写,AVFoundation(Apple:默认已勾选)AVFoundation 框架是 Apple 平台的一部分,可用于从相机捕获帧、编码和解码视频文件。
WITH_MSMF, WITH_MSMF_DXVA 视频读写,Microsoft Media Foundation(Windows:默认未勾选) Windows 的内置媒体基础框架(Windows' built-in Media Foundation framework)的后端,可用于从相机捕获帧,解码和编码视频文件。WITH_MSMF_DXVA 启用硬件加速处理支持
WITH_DSHOW 视频读写,DirectShow(Windows:默认已勾选)此后端使用较旧的 DirectShow 框架,只能用于从相机捕获帧。
WITH_V4L 视频读写,Video4Linux(Linux:默认已勾选)使用 Video4Linux API 从相机捕获图像。
WITH_FFMPEG 视频读写,FFmpeg(默认已勾选)与 FFmpeg 库集成,用于解码和编码视频文件和网络流。
WITH_GSTREAMER 视频读写,GStreamer(默认已勾选)启用与 GStreamer 库的集成,用于解码和编码视频文件、从摄像机和网络流中捕获帧。
WITH_1394 视频读写(默认已勾选)使用 DC1394 库对 IIDC IEEE1394 的支持。
WITH_OPENNI 视频读写(默认未勾选)OpenNI 可用于从深度感应相机捕获数据。已弃用。
WITH_OPENNI2 视频读写(默认未勾选)OpenNI2 可用于从深度感应相机捕获数据。
WITH_PVAPI 视频读写(默认未勾选)PVAPI 是用于 Prosilica GigE 相机的旧版 SDK。已弃用。
WITH_ARAVIS 视频读写,Aravis 库(默认未勾选)用于使用 Genicam 相机进行视频采集。
WITH_XIMEA 视频读写(默认未勾选)对 XIMEA 相机的支持。
WITH_XINE 视频读写(默认未勾选)对 XINE 库的支持。
WITH_LIBREALSENSE 视频读写(默认未勾选)对 RealSense 摄像头的支持。
WITH_MFX 视频读写,MediaSDK 库(默认未勾选)可用于原始视频流的硬件加速解码和编码。
WITH_GPHOTO2 视频读写,GPhoto 库(默认未勾选)可用于从相机中捕获帧。
WITH_ANDROID_MEDIANDK 视频读写,MediaNDK 库(默认未勾选)自 API level 21 起,可在 Android 上使用。
WITH_PTHREADS_PF 并行处理,pthreads(类 Unix:默认已勾选)基于 pthreads 库的默认后端可在 Linux、Android 和其他类 Unix 平台上使用。线程池在 OpenCV 中实现,可以通过环境变量 OPENCV_THREAD_POOL_* 进行控制。详细信息请参考 modules/core/src/parallel_impl.cpp 文件中的源代码。
WITH_TBB 并行处理,TBB(默认未勾选)Threading Building Blocks 是一个用于并行编程的跨平台库。
WITH_OPENMP 并行处理,OpenMP(默认未勾选)OpenMP API 依赖于编译器支持,适合多核计算。
WITH_HPX 并行处理,HPX(默认未勾选)High Performance ParallelX 是一个实验性后端,更适合多处理器环境。
PARALLEL_ENABLE_PLUGINS 并行处理,插件支持(默认已勾选)从 CV 4.5.2 版本开始支持动态加载线程后端。 目前仅支持单独的编译过程:首先必须使用一些默认的并行后端(例如 pthreads)构建 OpenCV,然后构建每个插件并将生成的二进制文件复制到 lib 或 bin 文件夹。
WITH_GTK GUI 后端,GTK(Linux:默认已勾选)GTK 是 Linux 和类 Unix 操作系统中的常用工具包。 默认情况下如果找到版本 3 将使用它,可以使用 WITH_GTK_2_X 选项来强制使用版本 2。
WITH_WIN32UI GUI 后端,WinAPI(Windows:默认已勾选)WinAPI 是 Windows 中的标准 GUI API。
- GUI 后端,Cocoa(macOS:默认已勾选)Cocoa 是 macOS 中使用的框架。
WITH_QT GUI 后端,qt(默认未勾选)Qt 是一个跨平台的 GUI 框架。
WITH_OPENGL GUI 后端,OpenGL 集成(默认未勾选)可用于与 GTK、WIN32 和 Qt 后端一起绘制硬件加速窗口。
HIGHGUI_ENABLE_PLUGINS GUI 后端,插件支持(默认已勾选)从 CV 4.5.3 版本开始,GTK 后端可以被构建为动态加载的插件。
HIGHGUI_PLUGIN_LIST GUI 后端,插件列表(默认为空) 要编译为插件的后端名称列表,用逗号或分号分隔。 支持的名称有 gtkgtk2gtk3all
BUILD_PROTOBUF 推理模块,protobuf 库(默认已勾选)构建自己的 protobuf 库副本。如果要使用外部库则必须禁用此选项。
WITH_PROTOBUF 推理模块,protobuf 库(默认已勾选)OpenCV 可以构建自己的库副本或使用外部库。dnn 模块需要此依赖项,如果找不到则 dnn 模块将被禁用。
PROTOBUF_UPDATE_FILES 推理模块(默认未勾选)重新生成所有 .proto 文件。必须安装与使用的 protobuf 版本兼容的 protoc 编译器。
OPENCV_DNN_OPENCL 推理模块(默认已勾选)启用内置的 OpenCL 推断后端。
WITH_INF_ENGINE 推理模块,自 OpenVINO 2022.1 起已弃用 。启用英特尔推断引擎 (Intel Inference Engine, IE)后端。允许以 IE 格式 (.xml + .bin)来运行网络。推断引擎必须作为 OpenVINO toolkit 的一部分安装,或者作为从源代码构建的独立库安装。
INF_ENGINE_RELEASE 推理模块(默认为2020040000自 OpenVINO 2022.1 起已弃用。定义与 OpenVINO 工具包版本绑定的推断引擎库版本。必须是 10 位的字符串,例如 2020040000 对应于 OpenVINO 2020.4。
WITH_NGRAPH 推理模块,自 OpenVINO 2022.1 起已弃用。启用对英特尔 NGraph 库的支持。该库是推断引擎后端的一部分,它允许运行从 OpenCV 支持的多种格式的文件中读取的任意网络:Caffe、TensorFlow、PyTorch、Darknet 等。必须安装 NGraph 库,它包含在推断引擎中。
WITH_OPENVINO 推理模块(默认未勾选)对英特尔 OpenVINO Toolkit 的支持。从 OpenVINO>=2022.1 起应该使用此选项而不是 WITH_INF_ENGINEWITH_NGRAPH
OPENCV_DNN_CUDA 推理模块,CUDA 后端(默认未勾选)。前置条件是必须安装 CUDA、CUBLAS 和 CUDNN
WITH_HALIDE 推理模块(默认未勾选)实验性的 Halide 后端,它可以在运行时为 dnn 层生成优化的代码。前置条件是必须安装 Halide。
WITH_VULKAN 推理模块(默认未勾选)实验性 Vulkan 后端。不需要附加依赖项,但可以使用外部 Vulkan 头文件(VULKAN_INCLUDE_DIRS)。
WITH_TENGINE 推理模块(默认未勾选)为 ARM CPU 启用实验性 Tengine 后端。前置条件是必须安装 Tengine 库。

可以根据自己的需求进行勾选,这里添加勾选:WITH_OPENGL ,再次点击configure。

注:如果opencv之后会在 qt 里面用到则需要添加勾选 WITH_QT

这次对余下的几条 红色标注项 进行核查(特别是路径),确认无误后点击configure。

Ⅱ.1.2 配置 - generate

直到没有红色标注项,点击 generate 生成 MinGW makefile。

编译文件夹可以看到编译所需的源代码和 Makefile 文件,关闭 cmake 软件

源代码文件夹 D:\OpenCV4.8.0\opencv\sources
编译文件夹 D:\OpenCV4.8.0\bin

Ⅱ.2 编译、安装

打开任务管理器 - 性能 - CPU,右键 CPU活动 图窗 - 将图形更改为 - 逻辑处理器

确认 逻辑处理器个数为 4 ,这个数字在后面需要用到

编译文件夹 下打开命令行窗口:

源代码文件夹 D:\OpenCV4.8.0\opencv\sources
编译文件夹 D:\OpenCV4.8.0\bin

Shift + 右键 -在此处打开 Powershell 窗口

输入指令 mingw32-make -j 4

注:指令中的 4 是刚刚在任务管理器中确认的 逻辑处理器 个数。

回车,开始漫长的编译过程,预计耗时 30min ~ 90min ,这个要看电脑性能了。

编译完成之后,输入指令 mingw32-make install

install 完事之后 添加 D:\OpenCV4.8.0\bin\bin 至环境变量:

注 这个路径是 mingw 编译生成的二进制文件夹下的 bin 文件夹:

至此,Windows系统下 CMake + mingw 编译 OpenCV 源代码就完事了。

<math xmlns="http://www.w3.org/1998/Math/MathML"> Ⅲ . v s c o d e 配置项 : 如有疑问可留言沟通交流 Ⅲ. vscode 配置项:^{如有疑问可留言沟通交流} </math>Ⅲ.vscode配置项:如有疑问可留言沟通交流

  1. 打开VSCode,在插件管理搜索对应的插件:C/C++,确认该插件已安装且启用:
  1. 下面是vscode里面关于opencv的配置项:
    创建三个配置文件(c_cpp_properties.jsonlaunch.json 以及 tasks.json)和一个cpp文件,配置文件(*.json)应当位于工作目录下的.vscode文件夹中:

编写c_cpp_properties.json文件:

c_cpp_properties.json 复制代码
{
    "configurations": [
        {
            "name": "win",  
            "includePath": [
                "${workspaceFolder}/**",  
                /*此处修改为 include 对应的路径*/  
                "D:/vscode/mingw64-posix-seh/include",  
                "D:/OpenCV4.8.0/bin/install/include",  
                "D:/OpenCV4.8.0/bin/install/include/opencv2"  
            ], 
            "defines": [
                "_DEBUG",  
                "UNICODE",  
                "_UNICODE"  
            ],  
            /*此处修改为本机 gcc 编译器所在的对应路径*/  
            "compilerPath": "D:/vscode/mingw64-posix-seh/bin/gcc.exe",  
            "cStandard": "c11",  
            "cppStandard": "c++17",  
            "intelliSenseMode": "clang-x64"  
        }  
    ],  
    "version": 4  
}

编写launch.json文件:

launch.json 复制代码
{    
    "version": "0.2.0",  
    "configurations": [  
        {  
            "name": "Opencv4.8.0 debug", // 配置名称,将会在启动配置的下拉菜单中显示  
            "type": "cppdbg",            // 配置类型,这里只能为 cppdbg  
            "request": "launch",         // 请求配置类型,可以为launch(启动)或attach(附加)  
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径  
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可  
            "stopAtEntry": false,        // 设为true时程序将暂停在程序入口处,一般设置为false  
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为 ${workspaceRoot} 即代码所在目录,根据自身情况设定为 ${fileDirname}  
            "environment": [],  
            "externalConsole": false,    // 调试时是否显示控制台窗口,设置为true时会弹出控制台出来,这个随意  
            "MIMode": "gdb",  
            /*此处修改*/  
            "miDebuggerPath": "D:/vscode/mingw64-posix-seh/bin/gdb.exe", // miDebugger的路径,注意这里要与 MinGw 的路径对应  
            "setupCommands": [  
                {  
                    "description": "Enable pretty-printing for gdb",  
                    "text": "-enable-pretty-printing",  
                    "ignoreFailures": false  
                }  
            ],  
            "preLaunchTask": "opencv4.8.0 compile task"  // 需要与 tasks.json 中的`label`字段保持一致  
        }  
    ]  
}

编写tasks.json文件:

tasks.json 复制代码
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "opencv4.8.0 compile task",
            /*此处修改*/
            "command": "D:/vscode/mingw64-posix-seh/bin/g++.exe",
            "args": [
                "-g",
                "-std=c++11",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                /*注意:此处导入的路径为编译后的 opencv 路径,请勿导入原始的 opencv 路径*/
                "-I", "D:/OpenCV4.8.0/bin/install/include/",
                "-I", "D:/OpenCV4.8.0/bin/install/include/opencv2/",
                "-L", "D:/OpenCV4.8.0/bin/install/x64/mingw/bin/lib*"
            ],// 编译命令参数
            "options": {
                /*此处修改*/
                "cwd": "D:/vscode/mingw64-posix-seh/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "panel": "new", //这里shared表示共享,改成new之后每个进程创建新的端口
            }
        }
    ]
}

新建main.cpp文件,同时准备一张图片:

main.cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(void)
{
    // 注意替换 图片的路径
    cv::Mat img = cv::imread("./earth.png");
    cv::imshow("img", img);
    cv::waitKey(0);

    return 0;
}

四个文件创建完成之后点击 main.cpp 点击右上角 run ,选择 Opencv4.8.0 debug: 这个是和 launch.json 文件中的 name 字段一致的。

wow ~ success !

<math xmlns="http://www.w3.org/1998/Math/MathML"> Ⅳ . 潜在问 题 如有疑问可留言沟通交流 Ⅳ. 潜在问题^{如有疑问可留言沟通交流} </math>Ⅳ.潜在问题如有疑问可留言沟通交流

  • Q1. 提示 error 'once_flag' in namespace 'std' does not name a type

A1: MinWg64 版本拥有两种线程类型: win32 and posix 。如果你当前安装的是 win32, 或许可以尝试替换为 "posix". index

  • Q2. win10 vscode opencv时运行出现 fatal error: opencv2/opencv.hpp: No such file or directory

A2: 出现该提示是由于 点击 run 之后选错了启动项 (应当选launch.json文件中name字段一致的启动项)?opencv的bin路径是否添加到系统环境变量且重启电脑? 三个配置文件未放到 .vscode 文件夹中?配置文件里面的路径有问题?...

  • Q3. VS code:代码出现蓝色波浪线,提示显示 xxxx: Unknown word.cSpell

A3: 安装了拼写检查插件(比如Code Spell Checker),但波浪线标注的单词来自外部的库、未被扩展识别,可以尝试右键 - spelling - Add Words to Workspace Settings。或者干脆直接禁用、卸载相应的扩展即可...

  • Q4. 如何在 vscode 可以使用 opencv ?

A4: 参考 mp.weixin.qq.com/s/hu39qgKae...

  • Q5. ...

A5: ...

<math xmlns="http://www.w3.org/1998/Math/MathML"> Ⅴ . 友情链 接 如有疑问可留言沟通交流 Ⅴ. 友情链接^{如有疑问可留言沟通交流} </math>Ⅴ.友情链接如有疑问可留言沟通交流

  1. 点云文章专栏
  2. Visual Studio文章专栏
  3. ...

代码调试不易,转载请标明出处!
如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作分享的最大动力,谢谢!

References
0. OpenCV - github
1. MinGW-w64 - for 32 and 64 bit Windows
2. Download | CMake
3. Release OpenCV 4.8.0 · opencv/opencv
4. gcc/g++/MingW/MSVC与make/CMake的关系
5. mingw不同版本全解析_mingw版本
6. c++ - mingw32-make ERROR, error: 'once_flag' in namespace 'std' does not name a type - Stack Overflow
7. Windows + VSCode 配置 OpenCV C++ 一站式开发调试环境
8.VS code:代码出现蓝色波浪线,提示显示 xxxx: Unknown word.cSpell
可以肯定的是学海无涯,这篇文章也会随着对 vscode 的深入学习而持续更新,
欢迎各位在评论区留言进行探讨交流。

相关推荐
plmm烟酒僧24 分钟前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
AI小杨40 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
冷凝女子2 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
撞南墙者3 小时前
OpenCV自学系列(1)——简介和GUI特征操作
人工智能·opencv·计算机视觉
柳鲲鹏4 小时前
OpenCV视频防抖源码及编译脚本
人工智能·opencv·计算机视觉
jndingxin4 小时前
OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用
人工智能·opencv·目标跟踪
ctrey_15 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
绕灵儿16 小时前
OpenCV通过指针裁剪图像
人工智能·opencv·计算机视觉
移民找老国19 小时前
加拿大移民新风向
java-ee·maven·phpstorm·visual studio code·nio
决战春招1 天前
人工智能之人脸识别(人脸采集人脸识别)
人工智能·opencv·学习·计算机视觉