版权声明:本文为博主原创文章,遵循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]485. Max Consecutive Ones 找到最大的连续的1的个数

    题目描述 输入只有0和1的数组(长度为正整数,且<10000),找到最大的连续1的个数 比如[1,1,0,1,1,1],输出3 思路 遍历数组,统计当前连续个数curCount和最大连续值max ...

  2. Defending Adversarial Attacks by Correcting logits

    目录 概 主要内容 实验 Li Y., Xie L., Zhang Y., Zhang R., Wang Y., Tian Q., Defending Adversarial Attacks by C ...

  3. c++定时器执行任务

    // // Created by leoxae on 19-9-2. // #ifndef KEEKOAIROBOT_TIMERTASKHELPER_H #define KEEKOAIROBOT_TI ...

  4. 自学java,如何快速地找到工作

    本人最近一直在帮零基础的java开发者提升能力和找工作,在这个过程中,发现零基础的java程序员,在自学和找工作时,普遍会出现一些问题,同时在实践过程中,也总结出了一些能帮零基础java开发尽快提升能 ...

  5. SpringCloud发现服务代码(EurekaClient,DiscoveryClient)

    1.说明 本文介绍SpringCloud发现服务代码的开发, 通过使用EurekaClient,DiscoveryClient来发现注册中心的服务等, 从而可以自定义客户端对注册中心的高级用法. 2. ...

  6. MongoDB 变更流(Change Stream)介绍

    1. 什么是Change Stream Change Stream 是MongoDB用于实现变更追踪的解决方案,类似于关系数据库的触发器,但原理不完全相同: | | Change Stream | 触 ...

  7. IntelliJ IDEA 2020.1.1 x64 Debug 断点调试模式详解

    前言 对于初入职场的萌新们来说,很多都还不会 Debug 断点模式.记得我刚写代码的时候,也是通过 System.out.println() 一行一行的把变量打印出来看.其实强大的编辑器已经帮我们做好 ...

  8. XPTH定位总结

    xpath定位总结:nodename 选取此节点的所有子节点. / :从根节点选取.绝对定位 //:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置. 相对定位(推荐使用相对定位) . :选取 ...

  9. Selenium_单选框和复选框的选中状态判定以及元素是否可用和可见判定(10)

    简单写个单选框和复选框界面 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /&g ...

  10. Java实现二叉搜索树的插入、删除

    前置知识 二叉树的结构 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode( ...