ubuntu20.04+opencv+vscode

第一次接触C++的opencv,需要在vscode中编写cv2代码并调试。根据vscode配置C++和Opencv(ubuntu18.04)能够正确配置,是一个靠谱的教程,现在记录一下过程,方面后续参考。

1、安装依赖

在终端中安装依赖:

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev # 下面是可选,我没有选
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

2、下载源码安装

去官网下载sources源码,版本选择第二个(最新的可能存在不稳定或其他bug,选第二个可能会稳定点)

下载到本地后解压(最好不要存在中文或奇怪字符的路径),在命令行中进入opencv-version文件夹,创建并进入build文件夹mkdir build && cd build,cmake编译cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..

结束后执行make指令(当然可以多线程,先nproc命令查询你的线程数,我的是20,所以使用j15指定15个线程)sudo make j15,这段等待时间较长。

完成后,指定sudo make install即可

3、环境配置

在cmake命令中设置了OPENCV_GENERATE_PKGCONFIG=ON,素以在/usr/local/lib/pdkconfig中生成了opencv4.pc文件,里面记录了opencv头文件、库文件的路径,现在配置一下(应该是环境变量一类,将其暴露给全局变量)

通过sudo vim /etc/bash.bashrc打开后在最后追加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

保存退出后,更新source /etc/bash.bashrc

修改动态库:通过sudo vim /etc/ld.so.conf.d/opencv.conf ,在里面添加/usr/local/lib,然后保存退出,再更新一下sudo ldconfig

3、检查校验

#终端输入以下两命令,显示正常则安装成功
pkg-config --modversion opencv4 #查看版本号
pkg-config --libs opencv4 #查看libs库

除此之外,opencv源码提供了测试程序,位于opencv-version/samples/cpp/examples_cmake,在终端进入该文件夹,然后:

mkdir build
cd ./build
cmake ..
make
./opencv_example 执行该可执行文件

会弹出一个框并显示“Hello OpenCV”

注意:在cmake阶段,如果cmake文件中需要opencv,则在编译时会打印找到的opencv路径,可以以此判断是否是期望的opencv版本

4、在vscode中测试

vscode安装不说了,现在在vscode中新建一个opencvtest.cpp文件,内容为:

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv){// 注意这里修改成你的图片路径Mat src = imread("test.jpeg",IMREAD_GRAYSCALE); //读取图片if (src.empty()) {                     //判断是否找到图片printf("没有找到图片 ");           //输出文字return -1;}else{namedWindow("input",WINDOW_AUTOSIZE);// 显示窗口命名为input ;WINDOW_AUTOSIZE显示大小为图片自定义大小,且不可以更改大小imshow("input",src); //显示waitKey(0);//显示的毫秒时间,如果函数参数<=0表示一直显示。>0表示显示的时间destroyAllWindows();return 0;}
}

c_cpp_properties.json
在.vscode文件夹的c_cpp_properties.json中,includePath下添加"/usr/local/include/opencv4"(解决检测到 #include 错误。请更新 includePath。已为此翻译单元(/home/zjgdyjy/WorkSpace/tensorrtx-master/yolov5/CutImage/opencvtest.cpp)禁用波形曲线。)

task.json
快捷键shift+ctrl+p搜索全局命令tasks,选择g++ 生成活动文件,配置内容:

// 节选
"args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.out",// 解决opencv2/opencv.hpp: 没有那个文件或目录"`pkg-config","--libs","--cflags","opencv4`"	//这是添加第三方库代码,要添加什么库直接继续加就行,不要忘记了 ` 符号//如下面再加个 gazebo11 第三方库(你得保证你安装的第三方库中含有.pc文件)// "`pkg-config","--libs","--cflags","opencv4,gazebo11`"],

launch.json
运行——>添加配置——>C++(GDB/LLDB)——>

{"configurations": [{"name": "C/C++: cpp 生成和调试活动文件","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.out","args": ["`pkg-config","--libs","--cflags","opencv4`",],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ build active file",		//要和 task.json的label字段一致"miDebuggerPath": "/usr/bin/gdb",//下面这行命令可以去除Vscode中编译后出现 [1]+   Done....  的提示"miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi"}],"version": "2.0.0"
}

如果想生成一个终端可以改:“externalConsole”: true ,弹出命令窗口

写在最后

有问题或者不清楚见作者原文,那写的更清楚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/617992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

近视的孩子用什么灯?学生考研护眼台灯推荐

随着时代快速发展&#xff0c;2022年我国近视人数达到了7亿&#xff0c;呈现低龄化趋势&#xff0c;儿童及青少年人数占了53.8%。现在学业负担都很重&#xff0c;每个家长都不希望自己的孩子近视或加深近视了&#xff0c;都会想尽一切办法保护视力。而护眼台灯就成了家长购买台…

BC3 有容乃大

描述 确定不同整型数据类型在内存中占多大&#xff08;字节&#xff09;&#xff0c;输出不同整型数据类型在内存中占多大&#xff08;字节&#xff09;。 输入描述&#xff1a; 无 输出描述&#xff1a; 不同整型数据类型在内存中占多大&#xff08;字节&#xff09;&am…

信息学奥赛一本通1957:【12NOIP普及组】质因数分解

1957&#xff1a;【12NOIP普及组】质因数分解 时间限制: 1000 ms 内存限制: 131072 KB 提交数: 13525 通过数: 7646 【题目描述】 已知正整数 n 是两个不同的质数的乘积&#xff0c;试求出较大的那个质数。 【输入】 输入只有一行&#xff0c;包含一个正整数 n。 …

Qt中QGraphicsView架构下实时鼠标绘制图形

上一章节介绍了关于QGraphicsView的基础讲解&#xff0c;以及简单的类图创建&#xff0c;由上一章节中最后展示的动画效果来看&#xff0c;今年主要讲述如何在QGraphicsView架构下&#xff0c;实时拖动鼠标绘制图形&#xff01; 今天主要以矩形为例&#xff0c;再来看一下展示…

苹果电脑RAW图像处理软件Capture One Pro 22 mac软件介绍

Capture One Pro 22 for mac是一款专业的RAW文件转换器和图像编辑软件&#xff0c;拥有更新的处理引擎、市场领先的性能和强大的新功能&#xff0c;可为 500 多台高端相机提供具有美丽色彩和令人难以置信的细节的终极图像质量。 Capture One Pro 22 for Mac版软件介绍 Capture…

Vue-17、Vue人员列表过滤(案例)

1、watch实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>列表渲染过滤</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js&qu…

用pytorch给深度学习加速:正交与谱归一化技术

目录 torch.nn参数优化 parametrizations.orthogonal 用途 用法 使用技巧 参数 注意事项 示例代码 parametrizations.spectral_norm 用途 用法 使用技巧 参数 注意事项 示例代码 总结 torch.nn参数优化 parametrizations.orthogonal 这个torch.nn.utils.para…

谷歌浏览器访问微信内链接

一、打开谷歌浏览器f12开发者模式 二、点击网络&#xff0c;已停用节流模式&#xff0c;选择自定义添加 三、点击设备&#xff0c;添加自定义设备&#xff0c;天上名称&#xff0c;在用户代理字符串里填上下面代码 Mozilla/5.0 (Linux; Android 7.1.; MI Build/NMF26X; wv) A…

CCRC认证的级别以及办理条件

CCRC认证的级别 CCRC信息安全服务资质&#xff0c;分为三级&#xff0c;分别是一级、二级、三级&#xff0c;还包含7个类别。其中一级最高&#xff0c;三级最低&#xff0c;资质级别是衡量服务提供者服务能力的尺度。 三个级别介绍 一级资质&#xff1a;不仅对企业规模、业务…

JavaScript Web Worker用法指南

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 Web Worker可以将耗时任务放到后台执行,避免阻塞UI。本文将详细介绍Web Worker的用法,让你…

【Leetcode】673.最长递增子序列的个数(Hard)

一、题目 1、题目描述 给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例2: 输入: [2,2,2,2,2] 输出: 5 解…

训练营四十五天 | ● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 一次跨1-m个台阶为物品&#xff0c;共有n个台阶为背包容量&#xff0c;排列问题&#xff0c;完全背包 代码随想录 import java.util.*; public class Main { public static void main (String[] args) { Scanner sc new…

FineBI实战项目一(22):各省份订单个数及订单总额分析开发

点击新建组件&#xff0c;创建各省份订单个数及订单总额组件。 选择自定义图表&#xff0c;将province拖拽到横轴&#xff0c;将cnt和total拖拽到纵轴。 调节纵轴的为指标并列。 修改横轴和纵轴的标题。 修改柱状图样式&#xff1a; 将组件拖拽到仪表板。 结果如下&#xff1a;…

【专业英语】计算机专业英语(第三版)清华大学出版社

专业英语 部分专业名词 短语 在这里插入图片描述

FlinkCDC的分析和应用代码

前言&#xff1a;原本想讲如何基于Flink实现定制化计算引擎的开发&#xff0c;并以FlinkCDC为例介绍&#xff1b;发现这两个在表达上不知以谁为主&#xff0c;所以先分析FlinkCDC的应用场景和技术实现原理&#xff0c;下一篇再去分析Flink能在哪些方面&#xff0c;做定制化计算…

hostnamectl命令使用方法

hostnamectl命令是一个用于管理系统主机名的命令。它可以用于查看、设置和修改主机名、静态主机名和图标名称。 使用hostnamectl命令可以执行以下操作&#xff1a; 查看当前主机名&#xff1a;运行hostnamectl命令&#xff0c;它将显示当前主机名及相关信息&#xff0c;如静态…

U盘用完到底能不能直接拔?一篇搞懂

有没有人懂这种情况&#xff01;&#xff01; 传输完文件之后&#xff0c;觉得大功告成 以十分帅气的姿势 and 迅雷不及掩耳之势 “咻”地一下把U盘直接给……拔掉了…… 然后瞬间想起没有安全退出&#xff0c;陷入深深的懊悔…… &#xff08;甚至还要再花时间&#xff0…

linux系统nginx proxy做反向代理

Nginx Proxy代理 代理概念正向代理反向代理两者的区别 nginx Proxy 配置代理模块代理配置启用nginx proxy代理 代理概念 正向代理 正向代理的过程隐藏了真实的请求客户端&#xff0c;服务器不知道真实的客户端是谁&#xff0c;客户端请求的服务都被代理服务器代替请求。我们常…

WebServer 跑通/运行/测试(详解版)

&#x1f442; 椿 - 沈以诚 - 单曲 - 网易云音乐 目录 &#x1f382;前言 &#x1f33c;跑通 &#xff08;1&#xff09;系统环境 &#xff08;2&#xff09;克隆源码 &#xff08;3&#xff09;安装和配置 Mysql &#xff08;4&#xff09;写 sql 语句 &#xff08;5&…

IDM 用户帐号过期提醒

芯片设计环境通常有比较严格的安全管理&#xff0c;用户帐号过期后就不能登录环境&#xff0c;影响用户工作。为减少影响&#xff0c;应该提前向用户发送提醒&#xff0c;及时更新密码。 方案设计 通过IDM REST API接口获取所有帐号信息&#xff0c;根据以下条件过滤&#xf…