1.简介

OpenCV由于其速度和直观的API,在图像处理领域是一个强大的工具。然而,配置 OpenCV 是一项艰巨的工作,尤其是在 Windows 上。

为了方便您在 VS Code 上配置 OpenCV,我决定写这篇文章来教您。

2.配置

本教程假设您使用以下配置:

OS: Windows 10 64-bit
Compiler: Mingw-w64 (Specifically, x86_64-8.1.0-posix-seh-rt_v6-rev0)
Compiler binaries' path: C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin
OpenCV version: 4.1.1
OpenCV binaries' path: C:\\opencv\\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\\x64\\mingw\\bin

\\分隔符是特意添加的。

3.配置步骤

3.0 安装VS Code(Visual Studio Code)

3.1 安装VS Code C/C++ extensions(ms-vscode.cpptools)

根据 VS Code 文档的建议,可以按照以下步骤安装:

  • 1.打开VS Code
  • 2.点击单击边框栏上的Extensions扩展视图图标(或 Ctrl+Shift+X 键盘组合)。
  • 3.搜索 C++。搜索后,您应该找到如下所示的扩展名:

    然后单击Install去安装它。

3.2 安装C/C++ Compiler 和 Debugger

在这部分我选择了 Mingw-w64。请注意,安装时应选择以下设置:

mac vs code opencv 没有代码提示 vscode使用opencv_OpenCV


选择这些设置的原因将在下一部分中提到。

我假设您将所有编译器内容安装在 C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0

3.3 下载预构建的OpenCV包

OpenCV-MinGW-Build 下载预构建的 OpenCV 包。因为我们选择的是 4.1.1 版本,所以这个版本有一些规范:

mac vs code opencv 没有代码提示 vscode使用opencv_OpenCV_02


我们可以看到这个包是用 MinGW-x86_64-8.1.0-posix-seh-rt_v6-rev0 编译的。因此,您应该将 MinGW 的配置设置与包使用的相同。

3.4 添加编译器路径和预构建的OpenCV包到Path变量

为了让其他程序在不输入绝对路径的情况下也能找到编译器和 OpenCV 包的名称,您可以使用编译器和 OpenCV 包的二进制文件来设置您帐户的 Path 变量。

要编辑 Path 变量,您可以转到控制面板 > 系统 > 高级系统设置(Control Panel > System > Advanced system settings)。然后切换到系统属性窗口中的高级(Advanced)选项卡,然后单击环境变量(Environment Variables)按钮。最后,编辑您帐户的 Path 变量(添加编译器和 OpenCV 二进制文件路径)。

我假设你在 C:\opencv\OpenCV-MinGW-Build-OpenCV-4.1.1-x64 中安装了所有 OpenCV 的东西

3.5.配置项目的 .vscode 文件。

首先,创建一个名为 opencvexample 的新项目。然后复制并粘贴我从这个 repo 创建的 task.jsonlaunch.jsonc_cpp_properties.json

我还对每个 json 文件和我应用的一些更改进行了一些简要说明。

  • task.json
    该文件告诉 VS Code 调用编译器以基于源代码创建可执行文件。我对commandargs进行了一些更改:
"command": "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
...
"args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-I","C:\\opencv\\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\\include",
                "-L","C:\\opencv\\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\\x64\\mingw\\bin",                
                "-llibopencv_calib3d411",
                "-llibopencv_core411",
                "-llibopencv_dnn411",
                "-llibopencv_features2d411",
                "-llibopencv_flann411",
                "-llibopencv_highgui411",
                "-llibopencv_imgcodecs411",
                "-llibopencv_imgproc411",
                "-llibopencv_ml411",
                "-llibopencv_objdetect411",
                "-llibopencv_photo411",
                "-llibopencv_stitching411",
                "-llibopencv_video411",
                "-llibopencv_videoio411"
            ],
...

command将调用编译器。在这里,我将路径更改为我想要的 MinGW 编译器。
args 将作为编译器标志传递给编译命令。您可以看到该程序将与 OpenCV 库链接。
作为一个大拇指规则,只包括你将要使用的库,尽管我包括了 OpenCV 的所有库。

  • launch.json
    当您开始调试程序时,launch.json 文件将启动 GDB 调试器,我更改了如下所示的一些行:
...
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
...
"miDebuggerPath": "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
...

program是该程序的可执行文件。
miDebuggerPath 找到调试器的可执行文件,然后我更改为我想使用的 GDB 调试器。

  • c_cpp_properties.json
    c_cpp_properties.json 让您可以更好地控制 C/C++ 扩展:
...
"includePath": [
                ...
                "C:\\opencv\\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\\include"
            ],
...
"compilerPath": "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe",
...

includePath 搜索将包含您想要的库的路径,我添加了 OpenCV 的路径。
compilerPath 找到编译器的路径,所以我设置为我要使用的编译器。

3.6创建代码,编译,运行

创建一个名为main.cpp文件,写入以下代码

#include <iostream>

#include <opencv2/opencv.hpp>

using namespace cv;

int main( int argc, char** argv )
{
    std::cout << "aa" << std::endl;
 
    std::string img = "lenna.jpg";
    Mat srcImage = imread(img);
    if (!srcImage.data) {
        return 1;
    }
    imshow("srcImage", srcImage);
    waitKey(0);
    return 0;
}

然后放置一个名为 lenna.jpg 的图像。

之后,编译项目并运行它,如果没有问题,你应该会得到一个带有 Lenna 图像的窗口。

要构建和运行项目,您可以按 Ctrl+Shift+B 构建并键入要在终端中运行的可执行文件名称。有关更多信息,您可以查看此官方指南

4.完整代码

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "C:\\opencv\\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\\include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

launch.json

{
    // This file originates from here: https://code.visualstudio.com/docs/cpp/config-mingw
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++.exe build active file"
        }
    ]
}

task.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": "g++.exe build active file",
            "command": "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-I","C:\\opencv\\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\\include",
                "-L","C:\\opencv\\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\\x64\\mingw\\bin",                
                "-llibopencv_calib3d411",
                "-llibopencv_core411",
                "-llibopencv_dnn411",
                "-llibopencv_features2d411",
                "-llibopencv_flann411",
                "-llibopencv_highgui411",
                "-llibopencv_imgcodecs411",
                "-llibopencv_imgproc411",
                "-llibopencv_ml411",
                "-llibopencv_objdetect411",
                "-llibopencv_photo411",
                "-llibopencv_stitching411",
                "-llibopencv_video411",
                "-llibopencv_videoio411"
            ],
            "options": {
                "cwd": "C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

lenna.jpg

mac vs code opencv 没有代码提示 vscode使用opencv_OpenCV_03

5.总结

在这篇文章中,我教授如何使用 OpenCV C++ 包从头开始设置 VS Code。