Ubuntu20.04 OpenCV详细安装教程(附多版本切换共存教程)

opencv安装有两种方式:

1.使用包管理器安装预编译版本(安装十分简单,但是版本只有4.2.0,且没有扩展模块且不支持Qt窗口)

2.从源码安装(比较复杂,但是推荐)

1.安装预编译版本

sudo apt install libopencv-dev

这样就安装完成了

这种安装方法,默认把opencv相关文件放置在系统目录

2.从源码构建安装(重点)

1.OpenCV官网下载源码

官网下载地址icon-default.png?t=N7T8https://opencv.org/releases/

如上图所示,选择Sources下载zip源码压缩包,下载完解压,如下图所示:

2.编译安装

安装所需工具

#更新apt可安装包列表
sudo apt update#安装cmake和g++
sudo apt install -y cmake g++#安装项目构建工具,有两个选择,make或ninja, ninja自动支持多线程,make得自己加-j选项,这里先全安装上
sudo apt install make ninja-build

使用cmake构建

#进入到源码目录
cd opencv-4.9.0#cmake构建
cmake -B build -GNinja -DCMAKE_INSTALL_PREFIX=~/lib/opencv4.9.0_install

命令解释:

        -B build :在当前目录创建一个build文件夹,然后构建到build文件夹里

        -GNinja : 指定生成用Ninja来构建的项目,默认是-GUnix(用make构建)

        -DCMAKE_INSTALL_PREFIX=~/lib/opencv4.9.0_install : 指定安装目录,否则默认安装到系统目录:/usr/lib,usr/include,这里是多版本共存的关键,指定一个自定义的目录(最好别是系统目录),比如我就在~/lib/opencv4.9.0_install中

注意:该命令执行过程中可能会连外网下载本地缺失的文件,建议科学上网设置好https代理

cmake命令执行完毕后,build目录多了一大堆文件,如下图所示:

 继续在当前目录,然后执行命令:

cmake --build build/

 正式开始编译! 

编译时间较长,耐心等待......

编译完成后执行命令:

cmake --install build/

执行这个命令,将编译好的库和头文件以及cmake文件复制到之前指定的CMAKE_INSTALL_PREFIX里,如下图所示:

3.设置环境变量,切换版本

使用OpenCV一般搭配cmake来使用,所以选择OpenCV的工作可以通过设置cmake的环境变量实现。

cmake是通过find_package函数来实现查找包功能,而find_package函数又是通过设置的搜索路径来查找对应的库配置文件。具体可查看:cmake:指定find_package的搜索路径_find_package 指定路径-CSDN博客文章浏览阅读1.4w次,点赞12次,收藏24次。find_package(OpenCV PATHS /opt/opencv NO_DEFAULT_PATH REQUIRED)if (OpenCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) message( ${OpenCV_LIBS})else() message("OpenCV not found, so we won't build the project.")en_find_package 指定路径https://blog.csdn.net/zhizhengguan/article/details/115207345

 概括一下就是:

1.可以在CMakeLists.txt文件里设置cmake环境变量

       <PackageName>_ROOT (支持查找子目录,但是需要设置cmp0074策略)或  <PackageName>_DIR(不支持子目录查找,必须指定OpenCVConfig.cmake所在目录)

2.可以在执行cmake命令时添加-D选项指定目录

        CMAKE_PREFIX_PATH 或 CMAKE_FRAMEWORK_PAT或CMAKE_APPBUNDLE_PATH

3.通过系统环境变量Path来搜索 

演示一下:

1.设置<PackageName>_DIR

查看一下OpenCVConfig.cmake文件所在目录:

cmake_minimum_required(VERSION 3.0)project(Demo)set(OpenCV_DIR "~/lib/opencv4.9.0_install/lib/cmake/opencv4") #对应上面刚查的目录find_package(OpenCV 4.9 REQUIRED)
message("find ${OpenCV_VERSION}")

 cmake运行一下,看到输出即可。

2.添加-D选项指定目录

cmake_minimum_required(VERSION 3.0)project(Demo)# set(OpenCV_DIR "~/lib/opencv4.9.0_install/lib/cmake/opencv4")find_package(OpenCV 4.9 REQUIRED)
message("find ${OpenCV_VERSION}")

注释掉set命令,通过-D选项查找:

cmake -B build -DCMAKE_PREFIX_PATH=~/lib/opencv4.9.0_install

查找成功:

 

可以看到,支持子目录查找,就不用精确到具体文件目录了。

另外,在CMakeLists.txt文件中也可以直接设置CMAKE_PREFIX_PATH:

cmake_minimum_required(VERSION 3.0)project(Demo)# set(OpenCV_DIR "~/lib/opencv4.9.0_install/lib/cmake/opencv4")
set(CMAKE_PREFIX_PATH "~/lib/opencv4.9.0_install")find_package(OpenCV 4.9 REQUIRED)
message("find ${OpenCV_VERSION}")

3.通过系统环境变量PATH查找 

gedit ~/.bashrc

在文件底部添加下面一段命令:

export PATH=~/lib/opencv4.9.0_install:$PATH

别忘了在当前终端source一下来重新执行.bashrc脚本,或者新打开一个终端会自动source :

source ~/.bashrc

Path设置的目录支持递归查找

验证一下:

cmake_minimum_required(VERSION 3.0)project(Demo)find_package(OpenCV 4.9 EXACT REQUIRED)
message("find ${OpenCV_VERSION}")

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

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

相关文章

一文搞懂前端跨页面通信的那些方案们

前端开发逃避不开跨页面通信这项工作&#xff0c;跨页面通信&#xff0c;就好比A页面要和B页面说话&#xff0c;可能只是说一句话&#xff0c;不需要回话&#xff0c;可能是要给一些东西&#xff0c;希望得到回复&#xff0c;并频繁进行沟通&#xff0c;接下来我们说说这些跨页…

『MySQL 实战 45 讲』20 - 幻读是什么,幻读有什么问题?

幻读是什么&#xff0c;幻读有什么问题&#xff1f; 需求&#xff1a;创建一个小表 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB;insert into t values(0,0,0),(5,5,5), (10,10,10),(15,…

TriCore User Manual 笔记 1

说明 本文是 英飞凌 架构文档 TriCore TC162P core archiecture Volume 1 of 2 (infineon.com) 的笔记&#xff0c;稍作整理方便查阅&#xff0c;错误之处&#xff0c;还请指正&#xff0c;谢谢 :) 1. Architecture 2. General Purpose & System Register 名词列表&#…

探索数据结构

什么是数据结构 数据结构是由&#xff1a;“数据”与“结构”两部分组成 数据与结构 数据&#xff1a;如我们所看见的广告、图片、视频等&#xff0c;常见的数值&#xff0c;教务系统里的&#xff08;姓名、性别、学号、学历等等&#xff09;&#xff1b; 结构&#xff1a;当…

远动通讯屏功能和作用

远动通讯屏功能和作用 首先大家要先了解&#xff0c;什么叫远动通讯&#xff1f;远动通讯是电力系统指用于远程通信和远程控制的设备。它主要采集电发场站的电气运行参数与远程调度监控中心进行数据交互&#xff0c;并接收调度中心远程的指令控制。提高电力系统的运行效率和可靠…

使用perf查看热点函数和系统调用最大延迟函数

1、安装perf工具 1.1、ubuntu 18.04 x86下的安装 安装sudo apt install linux-source sudo apt install linux-tools-uname -r # ubuntu 18.04虚拟机实操可行 1.2、ubuntu 18.04 ARM下的安装 参考 Nvidia Jetson系列产品安装Perf ​ARM64版本的Ubuntu上安装perf 与参考文…

汽车灯罩使用聚碳酸酯(PC)和PMMA(亚克力)哪个更好?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车灯罩使用聚碳酸酯&#xff08;PC&#xff09;和PMMA&#xff08;亚克力&#xff09;哪个更好&#xff1f; 聚碳酸酯&#xff08;PC&#xff09;和PMMA&#xff08;亚克力&#xff09;都是汽车灯罩常见的材质&#xff0c;它们各自具有独特的优点和特性&#xff0c;因此选择…

更专业的汽车软件研发工具链,怿星重磅发布新产品

怿星科技在2024北京国际车展同期举办主题为“创新引领未来——聚焦智能汽车软件新基建”的新产品发布会&#xff0c;重磅推出1款绝对优势产品和4套场景解决方案。同时举行了4场热点技术研讨&#xff1a;国产工具链的机遇与挑战、新架构下的的车载DDS应用探索及测试方案介绍、软…

微店商品详情API接口:打造个性化电商体验的利器

前言 随着电子商务的快速发展&#xff0c;越来越多的商家开始注重线上店铺的个性化建设和用户购物体验的优化。在这个过程中&#xff0c;API&#xff08;应用程序接口&#xff09;技术发挥着至关重要的作用。本文将重点介绍微店商品详情API接口&#xff0c;探讨其如何帮助商家提…

高压开关柜局部放电监测装置APD

安科瑞薛瑶瑶18701709087/17343930412 APD系列高压柜局部放电监测装置通过检测伴随局部放电而产生的电磁波辐射&#xff0c;实时监测的开关柜内局部放电的放电次数和放电频次等数据&#xff0c;对电气设备绝缘状况进行评估&#xff0c;发现设备潜伏性故障&#xff0c;最终实现…

docker 方式 elasticsearch 8.13 简单例子

安装 docker 虚拟机安装 elastic search 安装本地 # 创建 elastic 的网络 docker network create elastic # 用镜像的方式创建并启动容器 docker run -d --name es --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e "xpack.secur…

API开发淘宝(京东)API接口:获取淘宝京东等平台数据的api接口分享

接口应用场景——电商产品定价 电商平台产品的定价问题是很多品牌非常重视的一个问题&#xff0c;产品的定价取决于很多因素&#xff0c;包括成本、供需情况、促销策略及竞争对手的价格等。因此&#xff0c;想要更合理地定价&#xff0c;品牌需要获取到影响产品定价的各类数据&…

【Linux】17. 进程间通信 --- 管道

1. 什么是进程间通信(进程间通信的目的) 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了…

团队执行力差,多半都是管理的问题

在日常管理中&#xff0c;我们习惯用“执行力好不好”来评价一个团队的表现&#xff0c;但实际上&#xff0c;执行力更应该是一个管理者需要思考和解决的问题&#xff0c;而非单纯归咎于团队。 我们需要明确一点&#xff1a;执行力不是团队的问题&#xff0c;而是管理者的问题…

比亚迪CAN数据实时监控分析应用数字化差异化的决策价值洞察

在当今这个信息化飞速发展的时代&#xff0c;汽车数字化转型已成为企业持续竞争力的关键。中国新能源汽车行业的领军企业——比亚迪&#xff0c;其数字化之旅充分展现了企业的创新精神和对未来的深远洞察。 比亚迪的数字化战略不是简单的技术应用&#xff0c;而是一场深刻的商…

C++奇迹之旅:string类对象的容量操作

文章目录 &#x1f4dd; string类的常用接口&#x1f309; string类对象的容量操作&#x1f320;size&#x1f320;length&#x1f320;capacity&#x1f320;clear&#x1f320;empty&#x1f320;reserve&#x1f309;resize &#x1f6a9;总结 &#x1f4dd; string类的常用…

大数据集成平台建设方案-word原件资料

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; (1) 基于平台的基础架构&…

【优选算法】——Leetcode——611. 有效三角形的个数

目录 ​编辑 1.题目 2 .补充知识 3.解法⼀&#xff08;暴⼒求解&#xff09;&#xff08;可能会超时&#xff09;&#xff1a; 算法思路&#xff1a; 算法代码&#xff1a; 4.解法⼆&#xff08;排序双指针&#xff09;&#xff1a; 算法思路&#xff1a; 以输入: nums …

多个glibc库存在时如何查看ldd调用的哪个

但是发现存在多个版本的glibc版本&#xff0c;需要查看具体的库的信息&#xff0c;和相应的关键函数的信息&#xff0c;但是并不知道具体的libc.so.6的路径信息 rootalg-dev04:~/xingqiao# ldd --version ldd (GNU libc) 2.29 rootalg-dev04:/opt# which ldd /usr/local/bin/…

硬件基础——晶振(复试被问到)

1.什么是晶振 石英晶体振荡器&#xff0c;是芯片的心脏&#xff0c;主要用于提供给芯片稳定、精确的时钟频率信号。其主要利用石英晶体的压电效应&#xff0c;从而实现振荡。 一般晶振会在芯片的旁边&#xff0c;不能远离晶振&#xff0c;因为振荡时会受外界电磁干扰的影响。 我…