【OpenCV】如何在Linux操作系统下正确安装 OpenCV

前言

我是在虚拟机上跑的 Linux 5.8.0-44-generic。 配置如下:

目录

第一步:下载依赖文件

第二步:下载 opencv 和 opencv_contrib 源码

第三步:解压缩包

第四步:移动文件

第五步:生成 makefile 文件

第六步:进行 make 编译

第七步:配置路径

第八步:测试 opencv


第一步:下载依赖文件

这一步非常重要,如果是缺少某个依赖文件,编译 过程也不会出错,但是在使用 opencv 函数的时候就是提示错误,只能删了重新编译,非常的坑。 所以一定要先下载依赖文件。

通过以下命令来安装依赖文件。

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
sudo apt-get install libavcodec-dev libavformat-dev
libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install ffmpeg

第二步:下载 opencv 和 opencv_contrib 源码

从 GitHub 下载 opencv 和 opencv_contrib 源码,如果你是刚刚 安装 Linux,那么最好就是修改源,不然下载会非常非常慢。

具体操作请移步百度: 如何修改 Linux 源。

我这里用的都是 4.2.0 的版本。

OpenCV和contirb 的源码下载路径:

  • OpenCV:https://github.com/opencv/opencv/releases
  • opencv_contrib:https://github.com/opencv/opencv_contrib/releases

然而在下载过程中可能会出现下载不完全的情况(起码我是这样的),往往出现的问题是缺少 boostdesc_bgm.i 等问题。所以我们需要提前下载好这些文件,以防不时之需。文件我已经集合在了我的百度网盘里面。当然了如果不想自己配置opencv环境,我也在下面资源地址中给出了已经配置好opencv环境的ubuntu虚拟机【20多个G,登录密码:123456】。

资源获取:关注公众号【科创视野】回复关键字: opencv

下载完以后应该是这样子的:


第三步:解压缩包

通过命令解压 opencv 和 opencv_contirb

tar -zxvf opencv-4.5.1.tar.gz
tar -zxvf opencv_contirb-4.5.1.tar.gz

然后可以得到这样的两个文件夹:


第四步:移动文件

通过命令把 contrib 文件移动到 opencv 文件夹里面:

sudo cp -r opencv_contrib-4.5.1 opencv-4.5.1

打开 opencv 里面应该是长这个样子的:

通过命令,在 opencv 文件夹里面新建一个文件夹 bulid,然后进入这个文件夹。

sudo mkdir build
cd bulid

第五步:生成 makefile 文件

使用命令生成 makefile 文件,这里的命令不要原封不动的粘贴复制,要根据自己的路径进行修改,比如我 的 opencv 文件夹是在/home/omega-lee/下,就可以像下面那样写。这 个过程大概需要几十秒就可以完成。

【johnnywei@UbJohnnywei:~/OpenCV_Source/opencv-4.5. 1/build】$ sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/johnnywei/Ope nCV_Source/opencv-4.5.1/opencv_contrib-4.5.1/modules/ ..


第六步:进行 make 编译

我的虚拟机是 4 核的所以是 j4,这个根据自己的机子进行选择,多核心 编译能加快速度。大概需要 30 多分钟吧。 

sudo make -j4

在进行 make 的时候,大概到 77%左右就会出现错误,提示你缺少.i 文件。这个时候打开之前下载好的.i 文件夹,通过命令移植到缺失目录下。

[ 77%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc. cpp.o /home/johnnywei/OpenCV_Source/opencv-4.5.1/opencv_contrib-4.5.1/ modules/xfeatures2d/src/boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: 没有那个文件或目录 654 | #include "boostdesc_bgm.i" | ^~~~~~~~~~~~~~~~~ compilation terminated. make[2]: *** [modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/build.make:9 4 : modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc. cpp.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:6818 : modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/all] 错误 2 make: *** [Makefile:163:all] 错误 2 johnnywei@UbJohnnywei:~/OpenCV_Source/opencv-4.5.1/build$

执行拷贝的命令

【johnnywei@UbJohnnywei:~/OpenCV_Source/OpenCV_boo stdesc_file】$ sudo cp * ../opencv-4.5.1/opencv_contrib-4.5.1/modules/xfeatures2d /src/

移植完以后应该长这个样子:

然后继续执行编译命令:

sudo make -j4

继续等待,然后在大概 95%的时候继续报错,这个时候系统提醒你缺少某 hpp 文件,不要担心,这个文件不需要下载,直接可以在 opencv 文件夹中 找到。

通过命令打开 opencv_contrib 文件:

cd ./opencv-4.5.1/opencv_contrib-4.5.1/modules/xfe
atures2d/test

你会发现你并没有 features2d 文件夹,这个文件夹在 /opencv-4.5.1/modules 里面。

使用命令移动这个文件夹到缺失目录下:

【johnnywei@UbJohnnywei:~/OpenCV_Source】$ sudo cp -r opencv-4.5.1/modules/features2d/ opencv-4.5.1/opencv_contrib-4.5.1/modules/xfeatures2d/te st/

这下子基本问题全部解决了,继续执行 make -j4 命令编译。然后就可 以看到 100%编译完成。

接着就是安装,使用命令进行安装:

sudo make install

johnnywei@UbJohnnywei:~/OpenCV_Source/opencv-4.5.1/build$ sudo make install


第七步:配置路径

配置路径,执行下面命令配置环境变量,注意如果你当前使用的是 fish shell,或者别的 shell,请退出到 bash,不然配置会出问题。

sudo vim/etc/ld.so.conf.d/opencv.conf

这个时候你可能打开文件可能是空白的,没有关系,在文件末尾添加保存并退出 /usr/local/lib 执行生效命令:

sudo ldconfig

继续打开:

sudo vim /etc/bash.bashrc

在文件末尾添加写入:

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

保存退出。

执行更新命令:

source /etc/bash.bashrc sudo updatedb

整个时候就完成了整个 opencv 的编译配置。完结散花✧ (≖ ◡ ≖ ✿)


第八步:测试 opencv

opencv 内部集成了很多测试 demo,可以通过执行这些 demo 看是否 完成 opencv 的配置。 通过命令进入到 demo 中:

cd opencv-4.2.0/samples/cpp/example_cmake

因为虚拟机可能使用不了摄像头的原因,我们就稍微的修改一下代码, 让程序显示一张图片就好了。

sudo vim example.cpp

修改保存后退出进行编译操作。

sudo mkdir bulid
cd bulid
sudo cmake ..
sudo make

编译完以会得到一个可执行文件,执行后就可以看见图片了。

好了,以上全部是在 Linux 下安装并编译 opencv 的全部过程,虽然坑 有点多,但是多操作几次就习惯了。如果在测试的时候还是没办法使用 opencv,请认真比对我给出的过程。

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

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

相关文章

Linux高级IO之poll

(。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、poll函数接口 1.接口 2.poll做了什么工…

C++程序设计-第六/七/八章 运算符重载/包含与继承/虚函数和多态性【期末复习|考研复习】

前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念,以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门: 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函…

《探索虚拟与现实的边界:VR与AR谁更能引领未来?》

引言 在当今数字时代,虚拟现实(VR)和增强现实(AR)技术正以惊人的速度发展,并逐渐渗透到我们的日常生活中。它们正在重新定义人与技术、人与环境之间的关系,同时也为各行各业带来了全新的可能性。然而,究竟是VR还是AR更有潜力改变未来?本文将围绕这一问题展开深入探讨。…

Canal安装使用

一 Canal介绍 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 背景 早期,阿里巴巴B2B公司因为存在杭州和美国…

少儿编程 蓝桥杯青少组科技素养题 信息素养真题及解析第25套

少儿编程 科技素养 信息素养真题第25套 1、旅行结束之后,回到家的小蓝决定将照片备份在云端的网盘上。备份照片主要占用的是小蓝家的( )带宽 A、下行 B、上行 C、文件 D、数据 答案:B 考点分析:主要考查网络相关知识,要将照…

公众号IP白名单已添加服务器IP 122.88... 依然给出 40164 错误

公众号的IP白名单已添加 122.88... 依然给出 40164 错误。 {"errcode":40164,"errmsg":"invalid ip 122.88... ipv6 ::ffff:122.88..., not in whitelist rid: 65e85a07-458dfc0d-16003e03"} 解决方案: 一、检查 AppID 是否正确&…

【数学】【组合数学】1830. 使字符串有序的最少操作次数

作者推荐 视频算法专题 本博文涉及知识点 数学 组合数学 LeetCode1830. 使字符串有序的最少操作次数 给你一个字符串 s &#xff08;下标从 0 开始&#xff09;。你需要对 s 执行以下操作直到它变为一个有序字符串&#xff1a; 找到 最大下标 i &#xff0c;使得 1 < i…

Javaweb之Maven高级之继承的详细解析

2.1 继承 我们可以再创建一个父工程 tlias-parent &#xff0c;然后让上述的三个模块 tlias-pojo、tlias-utils、tlias-web-management 都来继承这个父工程 。 然后再将各个模块中都共有的依赖&#xff0c;都提取到父工程 tlias-parent中进行配置&#xff0c;只要子工程继承了…

C++单例模式、工厂模式

一、单例模式 (一) 什么是单例模式 1. 是什么&#xff1f; 在系统的整个生命周期内&#xff0c;一个类只允许存在一个实例。 2. 为什么&#xff1f; 两个原因&#xff1a; 节省资源。方便控制&#xff0c;在操作公共资源的场景时&#xff0c;避免了多个对象引起的复杂操作…

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Nginx1.25.3

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库&#xff0c;终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手&#xff0c;按照 MySQL &#xff0c; Nacos &#xff0c; Redis &#xff0c; Nginx &#xff0c; Gateway &#xff0c; Auth &#xff0c;…

异步编程实战:使用C#实现FTP文件下载及超时控制

博客标题: 异步编程实战&#xff1a;使用C#实现FTP文件下载及超时控制 如果你的函数不是async&#xff0c;你仍然可以实现相同的超时功能&#xff0c;但你将不得不依赖更多的同步代码或使用.Result或.GetAwaiter().GetResult()来阻塞等待任务完成&#xff0c;这可能导致死锁的风…

mybatis-plus整合spring boot极速入门

使用mybatis-plus整合spring boot&#xff0c;接下来我来操作一番。 一&#xff0c;创建spring boot工程 勾选下面的选项 紧接着&#xff0c;还有springboot和依赖我们需要选。 这样我们就创建好了我们的spring boot&#xff0c;项目。 简化目录结构&#xff1a; 我们发现&a…