版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://www.cnblogs.com/czlhxm/p/13848278.html

参考内容:将VSCode打造成OpenCV的IDE(C++, window10 1803)

目录:

1.前言

2.vscode下配置opencv的逻辑分析

3.MinGW、Python与CMake的下载与安装

4.OpenCV的下载与配置

5.利用Cmake对OpenCV源文件进行编译(重中之重)

6.利用minGW32-make对生成的makefile相关文件进行编译和装载。

7.修改vscode调试配置文件

8.常见问题与解决方案(不定时更新)

1.前言

近期因为学习OpenCV的需要,考虑到本身使用vscode已经十分顺手,以及vs下调试运行慢和工程文件臃肿等问题,打算利用已有的VScode对OpenCV环境进行搭建。出于中文互联网上有关文献较为过时, 对应的OpenCV版本较老(对为3.4.5左右),且耗时一周多以来照着过时文献反复调教始终没有顺利地复现博主们成功的情况,出现诸如Cmake的configure失败、利用mingw32-make对生成的cmake文件的各种编译失败、vscode头文件解析失败、g++的各种编译失败以及编译成功后gdb的载入失败等等。经历了一周多的摸索,终于摸清配置Opencv的一些关键要点和大致原理,成功在两台电脑设备下通过同样的操作进行了成功复现,故写下此文,谨以缅怀自己逝去的青春以及为各位需要相关搭建的探索者们一份宝贵经验。

对于阅读操作以下内容的读者,需要以已完成vscode对C++环境配置为前提进行如下操作。若未完成,可参考此文

测试环境:2020/10/20|windows10 x64|vscode 1.50.1|Mingw x64 posix seh|Cmake x64 3.19.0|Opencv 4.5.0

2.vscode下配置opencv的逻辑分析

vscode本身仅作为轻量化的文本开发环境,对于opencv的支持与vs下opencv的支持有着很大的不同,且配置繁琐度不亚于对vscode进行C/C++语言环境的搭建难度。想要使vscode能够支持windows下基于C++及mingw的OpenCV开发环境,需实现以下几个关键步骤:使vscode能够支持对于opencv的库导入和语法提示、使gcc支持对含有opencv源代码的编译、使gdb支持对含有opencv代码的可执行程序的调试。

对于opencv的库导入和语法提示,可直接通过修改.vscode配置文件中c_cpp_properties.json实现。

对于gcc对含有opencv源代码的编译,需修改task.json中编译命令行中加入相关头文件目录、链接库目录以及相关的链接库文件,而这本身opencv并不自带,需要自行通过利用cmake编译opencv源文件生成,而Cmake的编译又需要python的环境。

对于gdb对含opencv相关代码的可执行调试,需要gdb加载支持可执行文件中opencv相关功能的dll,这依然是通过利用cmake编译opencv源文件代码生成的。

3.MinGW、Python与CMake的下载与安装

MinGw的下载与安装不再做过多的阐述,具体参考我的另一篇文章,注意要点是x64版本且越新越好,推荐posix seh版本的,旧版本mingw可能会出现mingw32-make编译失败或gcc对编译失败的问题。

鉴于Python与CMake的下载和安装过于简单,此处亦不再做过多的阐释,注意要点是python只需达到2.8.0以上版本,CMake版本越新越好。

4.Opencv的下载与安装

笔者安装的是OpenCV 4.5.0版本,作此文时官网可查到的最新版本为4.4.0。建议下载最新版本,且推荐到github上官方opencv开发库下载发布的opencv套件资源,旧版本可能会出现编译生成链接库有略微差别(可自行调整g++编译命令配置)等问题

此处以安装opencv 4.5.0为例:将opencv文件解压到欲安装目录,并记住此安装目录。

5.利用Cmake对OpenCV源文件进行编译(重中之重)

1.打开Cmake;单击按钮“Browse Source...”,选择将对应之前opencv安装目录下的sources文件;单击按钮“Browse Build...”,选择opencv目录下build/x64目录,并新建一个MinGW的文件夹(用以存放编译生成的opencv文件)。

2.单击“Configure”按钮,此时会跳出让你选择编译器的窗口,请选择MinGW Makefiles模式,点击Specify native compilers选项,点击“Next”按钮。

3.重中之重之重中之重1:之后跳转到选择用以编译makefile相关文件的编译器,请务必选择MinGW安装目录下bin文件夹中的x86_64-w64-mingw32-gcc.exe与x86_64-w64-mingw32-g++.exe作为编译文件的编译器(若没有说明所下载的MinGW版本过低或非64位),点击“Finish”按钮。

经过一段配置时间,下面输出各种测试信息,在列表中生成了红色背景的各种配置项。

4.重中之重之重中之重2:在列表项中找到ENABLE_CXX11这一项,对其Value值进行勾选。在最新版本情况下大概率是没有的,此时需要我们自行添加这一项,点击“Add Entry”按钮,在Name一栏中输入ENABLE_CXX11,并在Value一栏中点击勾选,后单击“OK”按钮。此时可在列表栏第一项中找到自行添加的表项。

5.重中之重之重中之重3:在列表项中找到OPENCV_ENABLE_ALLOCATOR_STATS这一项,将Value值取消勾选。在最新版本情况下这一表项大概率是存在的,若没有可尝试自行添加,步骤如上,但不保证后面步骤的编译成功。

6.完成操作后,再次单击“Configure”按钮,此时会再次配置生成Cmakefile相关文件,比第一次生成速度快,且列表项背景由红变白。之后单击"Generate"按钮,完成Cmake对opencv的编译部分。

6.利用minGW32-make对生成的makefile相关文件进行编译和装载。

1.打开cmd,通过cd语句切换到opencv文件夹下build/x64/MinGW目录,若目录未发生跳转,请输入该目录对应磁盘盘符,如下:

2.输入minGW32-make命令对makefile相关文件进行编译,此时似乎会在MinGW(指编译器)所在文件夹中生成一些文件。此过程耗时最长,预计在30分钟左右,具体时间随电脑性能而波动,伴随着编译到100%而成功,若失败,请回滚到先前的操作反思问题。

3.编译成功后,输入minGW32-make install命令对编译文件进行装载

4.配置环境变量:将opencv所在文件夹下build/x64/MinGW/bin目录添加至系统变量Path中

7.修改vscode调试配置文件

可修改原cpp工作目录(连带其他非opencv相关代码在调试时编译速度会比以往慢一丢丢)或新建专用与opencv的工作目录,调整目录下.vscode文件夹中的相关配置,请根据以下配置作为参考修改自己的配置文件。

c_cpp_properties.json文件

{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}",
"D:/Install/opencv/build/include" //将opencv所在目录的/build/include目录路径添加于此 ],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "D:/Install/MinGW/bin/g++.exe",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}

launch.json文件

{
"version": "0.2.0",
"configurations": [
{
"name": "gdb build active file", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",// 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${fileDirname}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
"environment": [],
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "D:/Install/MinGW/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

tasks.json文件

{
"version": "2.0.0",
"command": "g++",
"args": [
"-g",
"-std=c++17",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-I","D:/Install/opencv/build/include", //此处输入opencv所在build/include文件夹,用于编译时导入对应库文件
"-L","D:/Install/opencv/build/x64/MinGW/bin", //此处输入opencv所在build/x64/MinGW/bin文件夹,用于编译时导入相应dll文件
"-l","libopencv_calib3d450", //根据build/x64/MinGW/bin文件夹内dll文件名自行填入或修改下列配置
"-llibopencv_core450",
"-llibopencv_dnn450",
"-llibopencv_features2d450",
"-llibopencv_flann450",
"-llibopencv_gapi450",
"-llibopencv_highgui450",
"-llibopencv_imgcodecs450",
"-llibopencv_imgproc450",
"-llibopencv_ml450",
"-llibopencv_objdetect450",
"-llibopencv_photo450",
"-llibopencv_stitching450",
"-llibopencv_video450",
"-llibopencv_videoio450"
], // 编译命令参数 "problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${fileDirname}"],
"pattern": {
"regexp": "^(.*):(/d+):(/d+):/s+(warning|error):/s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}

自此基于vscode的opencv环境配置完毕,可输入如下程序进行测试:

#include<opencv2/opencv.hpp>
using namespace cv; int main(void)
{
Mat srcImage = imread("D:/Work/Cpp/Test/1.jpg"); //载入指定路径的图像
imshow("Test OpenCV", srcImage); //显示该图像 waitKey(0); //调用opencv的等待函数,等待用户输入 return 0;
}

测试结果如图所示:

 8.常见问题与解决方案(不定时更新)

编号 问题描述 可能原因
1 cmake中Configure失败提示缺少python环境 python未安装
2 cmake中Configure其他失败 所选择的MinGW编译器不对
3 minGW32-make编译生成中提示代码错误 Cmake中未勾选ENABLE_CXX11选项,导致opencv中部分需要C++11特性的代码无法编译/编译器选择错误或版本过低/opencv版本过低
4 minGW32-make编译生成中提示no such file or directory Cmake中勾选了OPENCV_ENABLE_ALLOCATOR_STATS选项
5 minGW32-make编译生成中长时间卡进度 纯粹就是卡了,重新编译一次试试
6 vscode中include相关opencv库文件出现波浪线提示 vscode无法识别库文件,检查c_cpp_properties.json中includePath的库目录是否正确/或编译过程中由编译出错导致了文件丢失
7 vscode中F5调试输出编译器提示no such file or directory 编译过程出错导致的编译失败/配置文件tasks.json中编译命令行有问题
8 vscode中F5调试输出编译器提示无法找到XXX.dll 编译过程出错导致的编译失败/配置文件tasks.json中编译命令行有问题
9 vsocde中F5编译成功但gdb调试闪退 未成功配置环境变量/minGW32-make过程中导致的编译器改动出错(此处需要重装MinGW再重新编译)
10 vscode中可成功调试图像识别相关代码但调试视频功能相关代码调试闪退 opencv版本过低或cmake过程中出现了某些配置错误导致的minGW32-make编译出来的东西不全

再整理:Visual Studio Code(vscode)下的基于C++的OpenCV的最新搭建攻略解析的更多相关文章

  1. 再整理:Visual Studio Code(vscode)下的通用C语言环境搭建

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/czlhxm/p/11794743.ht ...

  2. Visual Studio Code (vscode) 配置 C / C++ 环境

    Visual Studio Code (vscode) 配置 C / C++ 环境 昨天突发奇想,想使用vscode配置C++环境,因为不想下载 Dev OR codeblock,然后借助了很多网上教 ...

  3. Visual Studio Code (VSCode) 配置 C/C++ 开发编译环境

    前言 工作多年,突然发现很多C++的基础都忘记了,加之C++不断更新换代后的各种新特性,于是想重拾C++的基础学习.虽然现在工作都是Linux平台,但考虑到个人方便,自己也仅仅想重温语法,家里家外都可 ...

  4. Visual studio code (vscode)

    调东西 : 左上角 File -> Preferences -> Workspace Settings ( User Settings 也可以, 它是 for 所有的 project, W ...

  5. IntelliJ idea webstrom Visual Studio Code vscode 设置cmder为默认终端 Terminal

    1.系统环境win10 2.确保环境变量中存在CMDER_ROOT,没有的话新增一个.地址为*:\***\cmder . idea.webstrom:设置中搜索terminal,shell path  ...

  6. visual studio code(vscode) 配置在terminal进行运行代码并且支持c++11特性

    1.点击设置 点击CodeRunner的小齿轮,点击configure extension settings 2.点击映射 点击executor map中的Edit in settings.json ...

  7. [转]Mac下配置基于SecurID的Cisco IPSec VPN全攻略(有图)

    来自: http://www.eefocus.com/Kevin/blog/11-09/230878_53c71.html RSA的SecurID长的是这个样子滴: Mac里面,可以设置VPN, 方法 ...

  8. macOS 下 Visual Studio Code(VSCODE)安装配置及应用

    Visual Studio Code 重新定义了 Code 编辑. 在任何操作系统上编辑和调试应用程序内置 Git 支持1000 种以上的扩展免费和开源 为什么使用VSCODE? 我们来看看以下功能: ...

  9. Ubuntu 14.04 下使用微软的跨平台轻量级开发神器 Visual Studio Code

    因为 Visual Studio Code 不断更新,官方最新 v1.32 的 .deb 包已经不能用于 Ubuntu 14.04 直接安装了. 下载 v1.31 的 deb 包安装即可:https: ...

随机推荐

  1. 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)

    [LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...

  2. Docker 与 K8S学习笔记(六)—— 容器的资源限制

    我们在启动Docker容器时,默认情况下容器所使用的资源是没有限制的,这样就会存在部分特别耗资源的容器会占用大量系统资源,从而导致其他容器甚至整个服务器性能降低,为此,Docker提供了一系列参数方便 ...

  3. Docker 与 K8S学习笔记(四)—— Dockerfile的编写

    在上一篇中我们简单介绍了Docker镜像的获取与使用,其中在镜像制作中提到在实际使用中一定要用Dockerfile方式去创建镜像而不要用docker commit方式,那么我们该如何编写Dockerf ...

  4. 【Java笔记】zipInputStream使用注意

    报错: MALFORMED java.lang.IllegalArgumentException 1. 记得使cry catch 方便找异常的位置 2. 使用zipInputStream打开的zip文 ...

  5. 第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗?

    第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗? 几个月前(回到3月份),您可能还记得我在这个系列的52件东西中发布了第23件(可以在这里找到).这篇文章的标题是& ...

  6. 第二十九个知识点:什么是UF-CMA数字签名的定义?

    第二十九个知识点:什么是UF-CMA数字签名的定义? 第16篇博客给出了DSA,Schnoor和RSA-FDH签名方案的细节,但是签名方案是什么?它应该保证什么样的安全性? 一个签名方案\(S\)是一 ...

  7. request参数获取,参数校验,参数处理

    需求: 1.post接口,需要在过滤器中进行参数校验,校验通过之后再执行方法 2.原有代码中使用x-www-form-urlencoded传参,新需求要使用json格式 3.原有代码校验过滤器使用Se ...

  8. CS5265完美替代CH7211|Type-C转HDMI2.0单转方案|CH7211替代方案

    龙迅Chrontel的CH7211是一款Type-C转HDMI2.0半导体设备,可通过USB Type-C连接器将DisplayPort信号转换为HDMI/DVI.这款创新的基于USB Type-C的 ...

  9. 论文翻译:2020_Acoustic Echo Cancellation by Combining Adaptive Digital Filter and Recurrent Neural Network

    论文地址:https://arxiv.53yu.com/abs/2005.09237 自适应数字滤波与循环神经网络相结合的回声消除技术 摘要 回声消除(AEC)在语音交互中起关键作用.由于明确的数学原 ...

  10. JSP中使用<c:forEach>标签循环遍历元素

    1.forEach标签元素 <c:forEach items="接收集合对象" var="迭代参数名称" varStatus="迭代状态,可访问 ...