首页 > 系统相关 >Windows下使用VSCode配置OpenCV开发环境

Windows下使用VSCode配置OpenCV开发环境

时间:2022-10-22 22:55:32浏览次数:80  
标签:文件 编译 Windows VSCode libopencv OpenCV MinGW CPP

Windows 下使用 VS Code 配置 OpenCV 开发环境

通过使用 GitHub 上他人编译好的动态库,进行 OpenCV 环境的配置。

目录

配置环境的前置知识非常多,在此一一罗列

  1. 环境变量的作用
  2. MinGW 不同版本的差异
  3. C/CPP 文件的编译与链接
  4. 动态链接与静态链接
  5. OpenCV 编译后的文件夹的结构
  6. g++ 编译命令中 -I, -L, -l 三个参数的含义
  7. VS Code 开发 CPP 项目,生成的三个 .json 文件的作用

MinGW 安装

选择 POSIX

这里涉及到 环境变量 相关的知识。

来到 https://sourceforge.net/projects/mingw-w64/files/

看到

MinGW-W64 GCC-8.1.0
- x86_64-posix-sjlj
- x86_64-posix-seh (请选择这个版本下载)
- x86_64-win32-sjlj
- x86_64-win32-seh
- i686-posix-sjlj
- i686-posix-dwarf
- i686-win32-sjlj
- i686-win32-dwarf

如果之前从未使用过 MinGW,那么请下载 posix 类别,并配置环境变量;

如果之前使用过 MinGW,那么你大概率下载的是 win32 类别,所以请重新安装并配置环境变量。

就算不编译 OpenCV 源码,要用它提供的动态链接库,也得老老实实使用 posix 那个。

下载和配置环境变量的过程可以参考 win10 系统 VSCODE 配置opencv

保留两个 MinGW

我自己之前下载的是 win32 ,所以直接踩坑。

最后我通过修改文件夹名字的方法,把两中 WinGW 都留下来,等以后要换的时候,再改回来。

# 我自己使用的部分系统环境变量
GCC_WIN32_HOME: C:\Library\mingw64-posix
GCC_POSIX_HOME: C:\Library\mingw64-win32
Path: 
  ***
  %GCC_POSIX_HOME%\bin
  ***

关于 win32 和 posix 的区别,请参考[1][2]

检验是否成功

g++ --version

C:\Users\User>g++ --version
g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

看第二行,有 posix 字样。

C/CPP 文件的编译与链接

  • 如果你是只会写单个 .c/.cpp 文件的小白
  • 如果你没有上过 计算机组成编译原理操作系统 这三门课
  • 如果你没有听说过 readelfobjdump.text/.data/.bss

我建议你先打好基础,再来配置 OpenCV,否则欲速则不达,就算手把手教会如何配置,

知其然而不知其所以然,下回配置环境还是得折腾一遍。

我先抛出一个问题:

一句简单的 printf("hello world");,在我的电脑上编译出了 .exe 文件,能直接在另一台电脑上运行?我为什么不用手动实现 printf 这个函数,别人也不用实现,这个函数到底定义在了哪里,实现在了哪里?

放两个视频:

如果能看懂任何一个,那么就可以继续下去。

OpenCV 文件夹结构

版本选择

本文通过使用别人编译好的 OpenCV dll 文件,保证编译后的文件能够运行。

这份文件在 GitHub 仓库 上可以下载,GitHub 下载的加速,可以参考 FastGit 使用指南

我使用的版本是 OpenCV 4.1.0-x64OpenCV 4.5.5-x64 我试了不行。

所以为了保证成功,用 4.1.0

文件结构

C:\LIBRARY\CPP\PACKAGES\OPENCV-MINGW-BUILD-OPENCV-4.1.0-X64
├─etc # 不用管
├─include # 头文件
│  └─opencv2
│      ├─calib3d
│      ├─core
│      ├─dnn
│      ├─features2d
│      ├─flann
│      ├─... # 不一一罗列
└─x64
    └─mingw
        ├─bin
        │  └─ *.dll # 一堆 dll 文件
        └─lib

首先,include 文件夹,字面意思,用来 include 的。

我们知道 CPP 是定义和实现分离的,以函数为例,通常在 .h 文件中声明,在 .cpp 文件中实现。

如果 main.cpp 里使用了其他文件中定义的函数,而我们只是想要生成 .o 文件,只需要 include 对应的 .h 文件即可。

include/opencv2 下就是各种 .h 文件。

然后是 x64/mingw/bin,这里有一堆 *.dll,这就是动态链接库文件。

将动态链接库添加到系统环境变量

为了让第三方的动态链接库生效,我们需要将动态链接库添加到系统环境变量。

对于我来说,是将 C:\Library\CPP\Packages\OpenCV-MinGW-Build-OpenCV-4.1.0-x64\x64\mingw\bin 添加到环境变量中。

这一步的作用类似于告诉系统 prinf() 这个函数的二进制文件在哪儿。

g++ 命令的参数

介绍三个参数 -I-L-l

-I 告诉编译器,头文件里的 include<package> 去哪儿找。

-L 告诉编译器,添加一个要动态链接的目录

-l 指定具体的动态链接库的名称

具体可以参考 gcc -L -l -I -i参数

VS Code 项目配置

我们使用 VS Code 生成的三个 .json 文件来配置 OpenCV 项目,而不是使用 cmake。

这三个文件分别是:

c_cpp_properties.jsonlaunch.jsontasks.json

c_cpp_properties

这个文件删了,不影响 编译链接,但是 VS Code 的 IntelliCode 插件依赖于这个文件。

{
    "configurations": [
        {
            "name": "Win64",
            "includePath": [
                "${workspaceFolder}/**",
                "C:/Library/CPP/Packages/eigen-3.3.8",
                "C:/Library/CPP/Packages/OpenCV-MinGW-Build-OpenCV-4.5.5-x64/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "C:/Library/mingw64-posix/bin/g++.exe"
        }
    ],
    "version": 4
}

includePath:告诉插件,要用的依赖在哪儿,我自己电脑上还有 eigen 这个第三方库。

compilerPath: 告诉插件,编译器的路径在哪儿

tasks.cpp

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-I",
                "C:/Library/CPP/Packages/eigen-3.3.8",
                "-I",
                "C:/Library/CPP/Packages/OpenCV-MinGW-Build-OpenCV-4.1.0-x64/include",
                "-L",
                "C:/Library/CPP/Packages/OpenCV-MinGW-Build-OpenCV-4.1.0-x64/x64/mingw/bin",
                "-l",
                "libopencv_calib3d410",
                "-l",
                "libopencv_core410",
                "-l",
                "libopencv_dnn410",
                "-l",
                "libopencv_features2d410",
                "-l",
                "libopencv_flann410",
                "-l",
                "libopencv_gapi410",
                "-l",
                "libopencv_highgui410",
                "-l",
                "libopencv_imgcodecs410",
                "-l",
                "libopencv_imgproc410",
                "-l",
                "libopencv_ml410",
                "-l",
                "libopencv_objdetect410",
                "-l",
                "libopencv_photo410",
                "-l",
                "libopencv_stitching410",
                "-l",
                "libopencv_video410",
                "-l",
                "libopencv_videoio410",
                "-l",
                "opencv_ffmpeg410_64",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

这个文件想要看懂,就需要 g++ 命令那些参数的相关知识了,而那些参数相关的知识,就是编译和链接。

isDefault:表示这是默认的构建任务,可以发现,-l 后面跟着的参数,就是我们下载的 OpenCV的 bin 下的 动态链接库 的文件名。

launch

配置 debug 用的,但是我一直没法 debug,也不知道哪儿出问题了。

构建并运行

准备一个test.cpp,内容如下,注意修改对应的图片地址。

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
    Mat img = imread("C:/Users/Pictures/avatar.jpg");
    imshow("image", img);
    waitKey();
    return 0;
}

点击小三角就行。

run test cpp

可能无法在 VS Code 中直接运行生成好的 text.exe 文件,可以在资源管理器中双击 .exe 文件运行。


  1. MinGW Posix VS Win32 - zhizhiEND的文章 ↩︎

  2. 【c/cpp 开发工具】MingGW 各版本区别及安装说明 ↩︎

标签:文件,编译,Windows,VSCode,libopencv,OpenCV,MinGW,CPP
From: https://www.cnblogs.com/ticlab/p/16817542.html

相关文章

  • windows安装docker
    安装DockerDesktopwindows10及以上版本可以直接安装DockerDesktop(官方推荐)。根据提示下载linuxkernelupdate,双击安装即可。更换中国源{"registry-mirrors":[......
  • vscode中指定文件类型使用Prettier格式化
    比如让后缀名“.j2”的jinjahtml文件按照HTML格式化。在settings.json中添加配置:{"[JinjaHTML]":{"editor.defaultFormatter":"esbenp.prettier-v......
  • 基于Windows Server 2022系统-Exchange Server 2019基本安装
    1.准备一台WindowsServer2022系统,要首先安装以下软件:a..NETFramework4.8b.VisualC++RedistributablePackageforVisualStudio2012c.VisualC++Redistributab......
  • Windows Server **** Preview 通用密钥
    Microsoft还提供了WindowsServer****Preview(微软服务器Windows系统预览版本)密钥,但明确表示它们仅适用于预览版。服务器标准(standard):MFY9F-XBN2F-TYFMP-CCV49-......
  • 一键启动vscode网页版
    自建在线开发环境核心是vscode,vscode使用MIT协议,意味着我们所有人都可以修改和衍生code-server(vscode网页版)version:"3"services:vscode-web:imag......
  • 计算机视觉的开端——OPenCV编程
    计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄像头和计算机代替人眼对目标进行识别、跟踪和测量等,并进一步做图像处理,使计算机处理成为更适合人眼......
  • windows系统下如何删除带有两点的文件夹
    情况说明:当文件夹末尾带点,或者带多个点的时候,删除文件夹会提示,文件夹不存在。以下方式,以删除文件夹路径为d:\osfipin\aaa..方式一:执行以下命令行代码mdd:\osfipin\aa......
  • 103-windows 安装kafka
    下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/2)下载后解压到一个目录:eg:D:\Java\Tool\zookeeper-3.4.103)在zookeeper-3.4.10目录下,新建文件夹,并命名(......
  • Jenkins里创建job项目(windows)
    常见自由模式项目在Jenkins里点击,打开后输入项目名称、选择“Freestyleproject”并确定。    源码管理:在项目列表面板点击刚才创建的空项目,打开后点击源码管理;......
  • Qt Windows上实现毛玻璃效果
    首发于我的个人博客:xie-kang.com博客内有更多文章,欢迎大家访问原文地址前言:很多人看到这个需求的第一想法都是录制软件窗口后的桌面内容,并且加上个高斯模糊就能实现了......