Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV

news2024/9/20 22:28:48

OpenCV是大型的Third party 计算机视觉库,在开发中会经常用到,本篇记录一下 在Ubuntu系统上安装和配置OpenCV,并使用C/C++调用OpenCV

关于VS Code配置C/C++开发环境的部分,见之前的博文 Linux/Ubuntu系统下使用VS Code配置C/C++开发环境。

1. 准备工作

(1)更新下环境

sudo apt-get update
sudo apt-get upgrade

(2)安装编译器和构建工具等,若已安装,跳过即可

复制代码

sudo apt-get install -y g++            # Ubuntu自带gcc
sudo apt-get install -y cmake
sudo apt-get install -y make
sudo apt-get install -y wget 
sudo apt-get install -y unzip
sudo apt-get install -y git

复制代码

(3)安装各种依赖库

复制代码

 sudo apt-get install build-essential pkg-config 
 sudo apt-get install libgtk2.0-dev libgtk-3-dev libglib2.0-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev liblapacke-dev libxvidcore-dev libx264-dev
 sudo apt-get install python-dev python-numpy
 sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
 sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper1 libjasper-dev libdc1394-22-dev libopenexr-dev libwebp-dev
 sudo apt-get install libatlas-base-dev gfortran 
 sudo apt-get install ffmpeg

复制代码

安装依赖库libjasper1 和 libjasper-dev时,若报错E:Unable to locate package libjasper-dev ,可以命令行执行以下命令,然后再安装依赖库 libjasper1 libjasper-dev

 sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"            # 国内可能需要换国内的镜像
 sudo apt-get update 

2. 下载OpenCV的源文件

可以在官网下载,也可以使用GitHub,这里选择git clone方式,下载的opencv文件夹在home目录下

 git clone https://github.com/opencv/opencv.git        # 默认下载最新的版本
 git -C opencv checkout 4.x

3. 生成构建脚本和编译

(1)cd切换到 opencv目录下,创建build文件夹,并切换到build目录下

(2)在build目录下使用cmake来生成构建脚本,使用如下命令,

 cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_FFMPEG=ON ..                # .. 不要漏掉

(3)在build目录下编译opencv

4. 安装OpenCV

编译成功后,在build目录下执行安装命令,等待安装完成

5. 配置环境

(1)配置环境变量:PKG_CONFIG_PATH

前面进行cmake时,已经生成了opencv4.pc配置文件,该文件的安装路径为:/usr/local/lib/pkgconfig/opencv4.pc

在build目录下使用命令查看一下

我们需要将opencv4.pc的路径添加到环境变量PKG_CONFIG_PATH中,创建一个名为pkgconfig.sh的脚本文件,如图

在pkgconfig.sh文件中添加下面一行语句,保存后关闭。

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

然后刷新环境变量,使之生效。

 source /etc/profile

配置环境变量PKG_CONFIG_PATH 完成后,就可以使用pkg-config命令来查看和管理opencv的配置文件(也就是opencv4.pc)

(2)配置OpenCV的动态库环境

我们需要将OpenCV的libs的安装目录添加到动态库加载配置文件中,这样在编译时,才能找到OpenCV的各种库文件,下面创建opencv4.conf 

在文件中添加下面一行

 /usr/local/lib

刷新一下动态库环境

 sudo ldconfig

6. 测试安装及配置是否成功

使用OpenCV自带的示例,按照下图操作

执行完以上命令后会调用摄像头,显示如下即成功。

7. 通过 cmake和gcc 来构建C/C++程序调用OpenCV

(1)在home目录下新建一个文件夹W_CPP,

(2)在W_CPP文件夹下写一个test.cc程序,如下:

(3)在同一文件夹下写一个CMakeLists.txt,如下

复制代码

# cmake needs this line
cmake_minimum_required(VERSION 3.10)
# Define project name
project(W_CPP)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    config: ${OpenCV_DIR}")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
# set "-std=c++11"
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

# Add OpenCV headers location to your include paths
# include_directories(${OpenCV_INCLUDE_DIRS})

# Declare the executable target built from your sources
add_executable(test test.cc)
# Link your application with OpenCV libraries
target_link_libraries(test PRIVATE ${OpenCV_LIBS})

复制代码

(4)在同一文件夹下放一张图片,比如 flying.jpeg

(5)命令行切换到W_CPP目录下,依次执行以下命令,

 cmake .
 make
./test flying.jpeg

以上执行成功,会显示图片,

8. 使用VS Code 配置C/C++项目环境来调用OpenCV

关于VS Code配置C/C++开发环境的准备部分,见本篇开始处的链接,下面直接配置文件,

(1)用VS Code打开W_CPP文件夹,在该目录下写一个test2.cc程序,

(2)配置tasks.json文件

(3)配置launch.json文件

(4)配置c_cpp_properties.json文件

(5)配置完成后,运行编译,开始调试

编译源文件:test2.cc保持打开状态,在VS Code菜单项找到 Terminal --> Run Build Task... ,点击运行

调试test2.cc:同样保持打开,在VS Code菜单项找到 Run --> Start Debugging ,点击运行(或使用F5),会显示图片:

OpenCV的安装、配置及调用演示整个过程到此结束。

OpenCV Contrib扩展库的安装也类似,以后补充。 

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_FFMPEG=ON ..      

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

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

相关文章

动态规划算法练习——计数问题

题目描述 给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。 例如,a1024,b1032,则 a 和 b 之间共有 9 个数如下: 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中 0 出现 10 次,1 出现…

360度全景航拍生成原创,玩命增粉10W ,月入万余元【视频教学 配套设施专用工具】

抖音近期推出了一种全新的玩法,那就是360度全景航拍,这为原创者们带来了新的增粉机会,有望在一个月内收入过万。这个新玩法配有视频教学和专用工具。 项目 地 址 : laoa1.cn/1993.html 抖音的这个新功能,就是360度全…

南京观海微电子----开关电流与输入输出电流的关系

BOOST 结构的工作原理及波形 BOOST 结构简单原理图见图 1,工作时各点的电压电流波形见图 2。 不考虑上电时的情形,仅考虑稳定工作时,情况如下: 当开关管 Q 导通时(开关管电压为 0),电感 L 相当…

【密评】 | 商用密码应用安全性评估从业人员考核题库(9/58)

Hill密码是重要古典密码之一,其加密的核心思想的是()。 A.线性变换 B.非线性变换 C.循环移位 D.移位 著名的Kerckhoff原则是指()。 A.系统的保密性不但依赖于对加密体制或算法的保密,而且依赖于密钥 B.系统…

【计算机网络】数据链路层的功能

数据链路层的基本功能: 封装成帧透明传输差错检测 数据链路层使用的信道主要有两种 点对点信道——PPP协议广播信道——CSMA/CD协议(有线局域网)、CSMA/CA协议(无线局域网) 数据链路层所处的地位 从图中可以看出,数据从主机H1送到主机H2需要在路径中…

C#【进阶】泛型

1、泛型 文章目录 1、泛型1、泛型是什么2、泛型分类3、泛型类和接口4、泛型方法5、泛型的作用思考 泛型方法判断类型 2、泛型约束1、什么是泛型2、各泛型约束3、约束的组合使用4、多个泛型有约束思考1 泛型实现单例模式思考2 ArrayList泛型实现增删查改 1、泛型是什么 泛型实现…

Autoxjs 实践-Spring Boot 集成 WebSocket

概述 最近弄了福袋工具,由于工具运行中,不好查看福袋结果,所以我想将福袋工具运行数据返回到后台,做数据统计、之后工具会越来越多,就弄了个后台,方便管理。 实现效果 WebSocket? websocket是…

【JavaEE初阶系列】——Cookie和Session应用之实现登录页面

目录 🚩本章目标 1.登录页面 2.servlet处理上述的登录请求 3.网站主页(成功登录之后的页面) 🚩实现过程 🎓登录页面 🎓Servlet处理登录请求 🎈获取请求传来的参数(用户名和密码) 🎈验证…

Electron学习笔记(五)

文章目录 相关笔记笔记说明 七、系统1、系统对话框2、自定义窗口菜单3、系统右键菜单4、快捷键(1)、监听网页按键事件 (窗口需处于激活状态)(2)、监听全局按键事件 (窗口无需处于激活状态)(3)、补充:自定义窗口菜单快捷…

Three.js基础练习——渲染一个立方体

1.学习内容参考了 three.js入门教程--零基础也能学会_threejs菜鸟教程-CSDN博客 本章内容包含渲染立方体,并配合ui工具食用~ 2.效果图 import * as THREE from three import * as dat from dat.gui import { OrbitControls } from three/addons/controls/OrbitC…

【网站项目】SpringBoot803房屋租赁管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【Golang】VSCode进行GO的调试

原来的launch.json {"version": "0.2.0","configurations": [{"name": "Golang","type": "go","request": "launch","program": "${workspaceFolder}","…

Linux技术---部署PXE服务器实现批量安装操作系统

部署PXE服务器实现批量安装操作系统 部署PXE服务器实现批量安装操作系统 部署PXE服务器实现批量安装操作系统1.安装相关服务组件1.1 安装tftp和xinetd1.2 安装DHCP服务1.3 准备 Linux 内核、初始化镜像文件、 PXE 引导程序、安装FTP服务并准备安装源1.4 配置启动菜单文件1.5 验…

JVM之运行时数据区

Java虚拟机在运行时管理的内存区域被称为运行时数据区。 程序计数器: 也叫pc寄存器,每个线程会通过程序计数器记录当前要执行的字节码指令的地址。程序计数器在运行时是不会发生内存溢出的,因为每个线程只存储一个固定长度的内存地址。 JAVA虚…

[蓝桥杯 2021 国 ABC] 123(java)——前缀和,思维

目录 题目 解析 代码 这么久了,我终于能不看别人代码完整写出来了,呜呜呜。虽然过程也是很曲折。 题目 解析 这个题,找其中数列的规律,1,1,2,1,2,3,1,2,3,4,...,因此我们把拆分成行列,如下…

Qt---信号和槽

一、信号和槽机制 所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号…

车载测试和传统测试有什么区别

搞清楚车载测试和传统应用测试的区别,就可以大胆冲冲冲! 车载测试随着市场的需求量增加又火来一波,一直’遥遥领先’的我们一定要告诉大家一个事实:车载测试和传统的应用测试是有很大区别的. 测试对象不一样 传统测试:测试的对象无非就是各种应用,比如电脑端的web系统(使用浏…

Git系列:git tag 使用技巧

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

FANUC机器人坐标系的分类和简介

1、概述 坐标系是为了确定机器人的位置和姿势而在机器人或空间上定义的位置指标系统,坐标系分为关节坐标系和直角坐标系,直角坐标系遵循右手定则,而关节坐标系则是以机器人每个轴所转动的角度来表示机器人当前的位置。 2、坐标系的分类及简…

weblogic 反序列化 CVE-2018-2628

这个漏洞因为java版本问题一直下载不了ysoserial反序列化工具,没办法生成payload。这里记录一下漏洞原理。 一、漏洞简介 Weblogic Server中的RMI 通信使用T3协议在Weblogic Server和其它Java程序(客户端或者其它Weblogic Server实例)之间传…