Ubuntu18.04下安装OpenCV4.2.0与Opencv_contrib(图文详细报错总结)

2023-11-11

前期准备—环境依赖

Cmake(编译器)

具体安装细节可以参考之前写的一篇《Ubuntu下安装Cmake(编译)》

依赖环境

sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

具体为以下环境依赖

build-essential 
libgtk2.0-dev 
libgtk-3-dev 
libavcodec-dev 
libavformat-dev 
libjpeg-dev 
libswscale-dev 
libtiff5-dev

在这里插入图片描述

Python环境

注意OpenCV4.2.0需要Python3.x的环境

sudo apt install python3-dev

此外还需要Numpy函数库

sudo apt install python3-numpy

在这里插入图片描述

streamer环境

sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

图像处理依赖

sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev

PS:对于显示图像imshow(),正常显示几秒后报错:
Gtk-Message: 11:37:50.847: Failed to load module “canberra-gtk-module”
问题为缺少库,执行命令安装即可:

sudo apt-get install libcanberra-gtk-module

在这里插入图片描述

安装OpenCV

OpenCV官网(https://opencv.org/releases/)找到OpenCV 4.2.0版本,下载Sources源码
在这里插入图片描述
也可以在OpenCV的GitHub中下载:
在这里插入图片描述

编译OpenCV

下载完成后解压进入OpenCV 4.2.0的文件目录中
新建build文件作为编译文件夹

mkdir build
cd build

配置cmake编译参数

cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DCMAKE_INSTALL_PREFIX=/usr/local ..

在这里插入图片描述

make编译

终端执行

make -j8

OpenCV4版本默认不生成.pc文件,执行OPENCV_GENERATE_PKGCONFIG=ON生成。
PS:这里-j的参数是根据CPU的核数,8核-j8,4核-j4
在这里插入图片描述
编译完成后执行安装:

sudo make install

在这里插入图片描述

配置OpenCV动态库

配置OpenCV动态库环境,程序执行时加载动态库.so的路径*

cd /etc/ld.so.conf.d/
sudo touch opencv4.conf
sudo sh -c 'echo "/usr/local/lib" > opencv4.conf'

更新pkg-config

sudo ldconfig

验证OpenCV环境

终端执行:

pkg-config --libs opencv4
pkg-config --cflags opencv4

在这里插入图片描述
出现如图所示即可表示OpenCV安装成功

# python环境下OpenCV环境验证:

进入Python环境,终端执行:

Python3
import cv2

在这里插入图片描述

安装Opencv_contrib

下载opencv_contrib

OpenCV-Github官方:https://github.com/opencv/opencv_contrib

配置编译项

进入OpenCV4.2.0的目录,清空刚才编译的build文件夹,重新编译:
这里需要注意Opencv_contrib的路径在这里插入图片描述

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 -D OPENCV_EXTRA_MODULES_PATH=/home/bigboss/opencv-4.2.0/opencv_contrib-4.2.0/modules/ ../

在这里插入图片描述

出现的问题

一、ippicv下载问题

在Cmake编译中可能会出现ippicv下载问题
在这里插入图片描述

下载ippicv_2019_lnx_intel64_general_20180723.tgz

Github地址:https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20180723/ippicv
PS:这里的下载根据自己的系统架构选择
在这里插入图片描述

修改opencv相关配置文件

进入**…/opencv-4.2.0/3rdparty/ippicv路径下打开ippicv.cmake**文件
在这里插入图片描述
修改第47行内容:将原来的下载网址替换为下载的本地文件路径:

   "file:~/Downloads/"  # 根据自己的实际路径参考

在这里插入图片描述
修改后:
在这里插入图片描述

二、boostdesc和vgg_generated文件下载较慢的问题

在编译中可能会遇到boostdescvgg_generated下载较慢的问题:
在这里插入图片描述
可以通过离线下载https://github.com/JZhong-Li/boostdesc_bgm.i
复制到到**opencv_contrib/modules/xfeatures2d/src/**目录中
在这里插入图片描述

make安装(Opencv_contrib)

终端执行make,-j的参数根据自己CPU实际内核做调整

maake -j4

如果遇到:

Makefile:165: recipe for target 'all' failed
make: *** [all] Error 2

重复执行make即可,
在这里插入图片描述
最后执行

sudo make install

切换OpenCV版本 (补充)

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

PS:执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加并保存

/usr/local/lib

在这里插入图片描述
同步配置路径生效

sudo ldconfig

配置bash

sudo gedit /etc/bash.bashrc

在最末尾添加:

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

在这里插入图片描述

保存使得配置生效

source /etc/bash.bashrc  

更新环境信息

sudo updatedb

OpenCV代码测试

调用摄像头

进入**/opencv-4.2.0/samples/cpp/example_cmake**

cd opencv-4.2.0/samples/cpp/example_cmake
cmake .
make
./opencv_example

执行结构:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04下安装OpenCV4.2.0与Opencv_contrib(图文详细报错总结) 的相关文章

  • 树莓派上的 /dev/mem 访问被拒绝

    我正在使用我的 Raspberry Pi 并且正在编写一个 cgi python 脚本 该脚本创建一个网页来控制我的 gpio 输出引脚 当我尝试将 RPi GPIO 作为 GPIO 导入时 我的脚本崩溃了 这是我收到的错误 File co
  • 在Python中寻找坐标系中某些点之间的最短路径

    我编写了一个代码 可以在坐标系中的特定宽度和长度范围内生成所需数量的点 它计算并列出我使用欧几里德方法生成的这些点的距离矩阵 我的代码在这里 import pandas as pd from scipy spatial import dis
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • “已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”

    我正在开发需要连接到另一个数据库以获取一些数据的应用程序 为此 我决定使用 SqlConnection reader 等 我需要执行一些查询 例如首先我需要获取某个用户的卡 ID 之后我需要通过该卡 ID 获取一些数据 这是我的代码 reg
  • 获取进程的所有 DLL

    我想获取为给定进程加载的所有 dll 的列表 我目前正在使用 NET框架4 0 我知道有一个bug https connect microsoft com VisualStudio feedback details 546430 syste
  • 使用 c# 中的 c++ ref 中的引用从 C# 调用 C++ 代码错误

    所以在我的 c dll 文件中我得到了以下函数 DLL void GetUserPass char userName char passWord userName ceva passWord altceva 现在我想从 c 调用它 但它给了
  • 使用 OpenSSL 库在 C++ 中生成 SHA 哈希值

    如何使用以下命令生成 SHA1 或 SHA2 哈希值OpenSSL https openssl org图书馆 我搜索了谷歌 找不到任何函数或示例代码 从命令行来看 很简单 printf compute sha1 openssl sha1 您
  • 扩展一个类

    编辑回答 虽然我最初的问题并没有完全按照康拉德 鲁道夫提供的答案所解决的方式解释我的需求 但他 无意或有意 基本上为我写了我想写的内容 类本身不会被扩展 但通过使类了解新函数来扩展其功能 这些新函数允许它 类 处理更广泛的问题 我非常感谢您
  • C# 的 user32 和内核方法列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个很好的清单来说明我们可以从中进口什么user32 dll and kernel dll并在 C 中使用 我是 Windows A
  • Python - 函数无法在新线程中运行

    我正试图杀死notepad exe使用此函数在 Windows 上进行处理 import thread wmi os print CMD Kill command called def kill c wmi WMI Commands not
  • Python记录多个模块记录器在主程序之外不起作用

    我的目标是从多个模块进行日志记录 同时仅在一个位置 主程序中 配置记录器 如图所示这个答案 https stackoverflow com questions 15727420 using python logging in multipl
  • 为什么 g++ 在编译的二进制文件中存储类名?

    我注意到如果我跑strings在我编译的程序上g 输出包含它使用的各种类的名称 该程序是用 O3并且没有 g or p 并且当我剥离二进制文件时 类名仍然存在 我想知道为什么有必要g 将此信息存储在二进制文件中 出现的类名似乎都是使用虚函数
  • Pandas - 过滤器和正则表达式搜索 DataFrame 的索引

    我有一个 DataFrame 其中列是 MultiIndex 索引是名称列表 即index Andrew Bob Calvin 我想创建一个函数来返回数据帧中使用名称 Bob 或以字母 A 开头或以小写字母开头的所有行 如何才能做到这一点
  • Python 和 Visual Studio Code - 如何在编辑器中运行特定文件?

    我正在使用 Visual Studio Code 和 Python 编写一个小型应用程序 我的应用程序有两个文件 Main py and MyCustomClass py Main py是应用程序的入口点 MyCustomClass py包
  • 如何获取数字列的确切类型,包括。规模和精度?

    有没有办法知道列中列的确切类型DataTable 现在我正在这样做 DataTable st dataReader GetSchemaTable foreach DataColumn col in st Columns var type c
  • 比较 C# 中的对象属性[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • 选择 matplotlib xticks 频率

    我正在用字符串作为 x 标签绘制数据 我想控制标签频率 以免文本使轴过载 在下面的示例中 我只想每 3 个刻度看到一个标签 a d g j 我可以做到这一点的一种方法是每 n 个元素用 2 个空字符串替换 my xticks 元素 但我确信
  • 我可以创建一个 List> 吗?

    我正在尝试创建一个列表WeakReference使用 4 5 泛型实现 这样我就可以避免类型检查和转换WeakReference目标 但 WeakReference
  • Eclipse (C/C++) 错误:平台关闭后发现作业仍在运行

    当我打开 Eclipse 时 它 在一小时前工作过 但在启动时冻结并给出错误 发生错误 请参阅日志文件 请参阅下面的日志文件 尽管其中一些信息出现在日志中 操作系统 Mac OSX 10 7 5 Eclipse 面向 C C 开发人员的 E

随机推荐

  • STM32 CubeMX 生成RT-Thread工程时RT-Thread源码不能Go To Definition跳转

    STM32 CubeMX 生成RT Thread工程时RT Thread源码不能Go To Definition跳转 MDK报错如下 Browse information of one or more files is not availa
  • 如何使用PVRTexTool提升移动端图形效果

    导语 本文作者Ben Anuworakarn 是PowerVR 开发技术团队的技术作者 具有计算科学工程知识背景 文中 他针对移动端游戏画面的优化 介绍了图像纹理处理 Mipmapping以及渗色等相关技术 同时 通过充分利用PVRTexT
  • the propfind response did not include the requested properties

    从仓库检出代码客户端提示如下错误 the propfind response did not include the requested properties 这意味着 客户端的协议版本高于服务器的版本 server的协议没有client要
  • Spring注解之实体类常用注解

    import org hibernate annotations AccessType import org hibernate annotations import javax persistence import javax persi
  • 【CSRF攻击分析】

    目录 一 什么是CSRF漏洞 二 CSRF漏洞的原理和利用过程 三 CSRF漏洞的检测方法 四 攻击利用姿势 五 防护手段 一 什么是CSRF漏洞 CSRF即跨站点请求伪造 Cross Site Request Forgery 跟XSS攻击
  • 内测体验:GitHub Copilot智能代码补全自动写代码插件

    异想之旅 本人原创博客完全手敲 绝对非搬运 全网不可能有重复 本人无团队 仅为技术爱好者进行分享 所有内容不牵扯广告 本人所有文章仅在CSDN 掘金和个人博客 一定是异想之旅域名 发布 除此之外全部是盗文 概述 一大早起床 收到了GitHu
  • 工业数字智能化常用系统简介

    文章目录 QMS 1 IPQC 过程检 2 OQC 出货检 3 SPC 统计工序控制 4 Andon 安灯 5 其他 MDM MES QMS 质量管理体系 是Quality Management System 的简称 通常包括制定质量方针
  • Centos配置OpenVPN+OpenLDAP认证

    Centos配置OpenVPN OpenLDAP认证 一 安装openvpn auth ldap插件 二 配置ldap conf文件 三 配置openvpn中的server conf文件 四 配置客户端client ovpn文件 五 开启路
  • 计算机提示msvcp110.dll文件丢失下载安装修复教程

    电脑打开一个浏览器后在顶部网址栏目输入 dll修复程序 site 按下键盘的回车键打开前往 下载完成的修复工具需要对其进行压缩 解压好了以后打开工具 打开修复工具后 可以看到右边修复与检测的项目 点击一下开始检测电脑丢失的dll系统文件 检
  • 回来喂马啊

    继续回来喂马了 1 这么多天没更新的原因 断更也有一段时间了 近期实在是业务过于繁忙 上线了项目之后又开启了新的项目 确实很难顾得上 毕竟一下班回家就累的只想躺平哈哈哈哈 还有一个原因是新项目和后续的项目转用了SpringBoot Myba
  • ios中的锁

    代码测试可参考 只有实际写过才能更好的理解 在平时开发中我们经常会使用多线程 多线程为我们带来了很大便利 也提高了程序的执行效率 但同时也带来数据风险 当至少有两个线程同时访问同一个变量 而且至少其中有一个是写操作时 就发生了Data ra
  • java中栈的使用

    栈是什么 栈的定义 栈是我们经常使用的一种线性数据结构 它是只能通过一端操作的线性表 我们可以操作的一端称之为栈顶 另一端则称之为栈底 特点 栈通常和队列作比较 队列的特点是先进先出 栈的特点则是先进后出 举一个例子 比如说我们生活中洗碗
  • hdu 6181 Two Paths

    Problem acm hdu edu cn showproblem php pid 6181 Reference Dijkstra应用之次短路 2017 Multi University Training Contest 10 1011
  • 基于微信小程序的在线小说阅读系统,附数据库、教程

    1 功能简介 Java基于微信小程序的在线小说阅读系统 微信小程序的在线小说阅读系统 系统的整体功能需求分为两部分 第一部分主要是后台的功能 后台功能主要有小说信息管理 注册用户管理 系统系统等功能 微信小程序主要分为首页 分类和我的三部分
  • ArcSDE 日志文件表(一)

    今天跟大家介绍一下ArcSDE日志文件表 一直都想好好研究一下这块 因为基本上不太受大家重视 感兴趣的用户不是很多 但是一旦出现多用户并发查询或者版本操作的时候 这个东西就显得非常重要了 而且根据不同的用户场景设定不同的日志类型 对相关效率
  • HTTP超文本传输协议

    HTTP协议 超文本传输协议 注意 我们以后编写Servlet类时 不会直接继承GenericServlet类 因为我们是B S结构系统 这种系统是基于HTTP超文本传输协议的 他有一个专门的Servlet类 我们编程的时候要继承HttpS
  • esp8266 esp12 AT指令连接wifi热点联网,HTTP获取OneNET物联网平台消息,控制四路远程开关

    esp8266 esp12 使用AT指令联网非常方便 很适合应对已经开发好的成品需要增加联网功能的需求 使用AT指令进行开发 大多数是产品已经开发好 只需要增加小数据量的联网功能 而且不想对既有成品有较大的方案修改 下面来使用 esp826
  • AttributeError: 'generator' object has no attribute 'next'

    在python3 x版本中 python2 x的g next 函数已经更名为g next 所以只需要将g next 换成g next 就可以了 如果你觉得g next 太丑 使用next g 也能达到相同效果
  • CentOS7中使用yum安装Nginx的方法

    最近无意间发现Nginx官方提供了Yum源 因此写个文章记录下 1 添加源 默认情况Centos7中无Nginx的源 最近发现Nginx官网提供了Centos的源地址 因此可以如下执行命令添加源 sudo rpm Uvh http ngin
  • Ubuntu18.04下安装OpenCV4.2.0与Opencv_contrib(图文详细报错总结)

    Ubuntu18 04下安装OpenCV4 2 0与Opencv contrib 图文详细 前期准备 环境依赖 Cmake 编译器 依赖环境 Python环境 streamer环境 图像处理依赖 安装OpenCV 编译OpenCV 配置cm