Linux 环境下编译安装 OpenCV 4.8.x
在 Linux 环境下编译安装 OpenCV 4.8.x 需要安装一系列依赖库。以下是详细的步骤说明,并附上每个依赖库的作用解释。
1. 环境准备
操作系统
- 推荐使用 Ubuntu 20.04/22.04 或其他基于 Debian 的 Linux 发行版。
编译器
- GCC 9 或更高版本(默认已安装)
- CMake 3.5.1 或更高版本(用于配置和生成构建文件)
Python(可选)
- Python 3.6 或更高版本
- NumPy(用于 Python 绑定)
2. 安装依赖库
以下是 OpenCV 4.8.x 编译所需的依赖库及其作用:
2.1 基本编译工具
sudo apt update
sudo apt install build-essential cmake git pkg-config
- build-essential:包含 GCC 编译器和基本的开发工具(如 make)。
- cmake:用于配置和生成 OpenCV 的构建文件。
- git:用于下载 OpenCV 源码。
- pkg-config:用于管理编译时的库路径和链接选项。
2.2 图像编解码库
sudo apt install libjpeg-dev libpng-dev libtiff-dev libopenjp2-7-dev
- libjpeg-dev:JPEG 图像格式支持。
- libpng-dev:PNG 图像格式支持。
- libtiff-dev:TIFF 图像格式支持。
- libopenjp2-7-dev:JPEG 2000 图像格式支持。
2.3 视频编解码库
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavutil-dev
- libavcodec-dev:视频编解码支持(FFmpeg 的一部分)。
- libavformat-dev:视频容器格式支持(FFmpeg 的一部分)。
- libswscale-dev:视频缩放和颜色空间转换支持(FFmpeg 的一部分)。
- libavutil-dev:FFmpeg 的工具库,提供通用功能。
2.4 GUI 支持
sudo apt install libgtk-3-dev
- libgtk-3-dev:GTK 图形界面库,用于 OpenCV 的窗口显示和用户交互。
2.5 线性代数库
sudo apt install libopenblas-dev libatlas-base-dev liblapack-dev gfortran
- libopenblas-dev:高性能线性代数库,用于矩阵运算。
- libatlas-base-dev:优化的线性代数库。
- liblapack-dev:线性代数库,用于高级数学运算。
- gfortran:Fortran 编译器,用于编译某些数学库。
2.6 多线程支持
sudo apt install libtbb2 libtbb-dev
- libtbb-dev:Intel TBB(Threading Building Blocks)库,用于多线程并行计算。
2.7 GStreamer 支持
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
- libgstreamer1.0-dev:GStreamer 多媒体框架,用于视频流处理。
- libgstreamer-plugins-base1.0-dev:GStreamer 基础插件。
2.8 Python 绑定支持(可选)
sudo apt install python3-dev python3-numpy
- python3-dev:Python 3 开发头文件和库。
- python3-numpy:NumPy 库,用于 Python 绑定的矩阵运算。
3. 下载 OpenCV 源码
# 下载 OpenCV 和 OpenCV Contrib 源码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git# 切换到 4.8.x 版本
cd opencv
git checkout 4.8.x
cd ../opencv_contrib
git checkout 4.8.x
4. 配置 CMake
# 创建构建目录
cd ../opencv
mkdir build
cd build# 配置 CMake
cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local \-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \-D OPENCV_ENABLE_NONFREE=ON \-D BUILD_opencv_python2=OFF \ # 禁用 Python 2 绑定-D BUILD_opencv_python3=OFF \ # 禁用 Python 3 绑定-D BUILD_opencv_python_bindings_generator=OFF \ # 禁用 Python 绑定生成器
可选配置
- 启用 CUDA 支持:
-D WITH_CUDA=ON \ -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \ -D CUDA_ARCH_BIN="7.5" \ # 根据 GPU 架构设置 -D WITH_CUDNN=ON \
- 启用 OpenCL 支持:
-D WITH_OPENCL=ON \
- 启用 VTK 支持:
-D WITH_VTK=ON \ -D VTK_DIR=/path/to/vtk/build \ # 指定 VTK 安装路径
- 启用 Python 支持:
-D BUILD_opencv_python3=ON \ -D PYTHON3_EXECUTABLE=$(which python3) \ -D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \ -D PYTHON3_LIBRARY=$(python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \ -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())")
5. 编译和安装
# 编译(根据 CPU 核心数调整 -j 参数)
make -j$(nproc)# 安装
sudo make install
6. 验证安装
C++ 验证
#include <opencv2/core.hpp>
#include <iostream>int main() {std::cout << "OpenCV version: " << cv::getVersionString() << std::endl;return 0;
}
编译并运行:
g++ -o test_opencv test_opencv.cpp `pkg-config --cflags --libs opencv4`
./test_opencv
Python 验证
import cv2
print("OpenCV version:", cv2.__version__)
7. 常见问题
- 缺少依赖库:
- 根据 CMake 输出的错误信息安装缺失的依赖库。
- CUDA 支持问题:
- 确保已安装 CUDA Toolkit 并正确配置环境变量。
- Python 绑定问题:
- 确保 Python 和 NumPy 已正确安装,并在 CMake 中正确配置路径。
相关文章:
Linux 环境下编译安装 OpenCV 4.8.x
在 Linux 环境下编译安装 OpenCV 4.8.x 需要安装一系列依赖库。以下是详细的步骤说明,并附上每个依赖库的作用解释。 1. 环境准备 操作系统 推荐使用 Ubuntu 20.04/22.04 或其他基于 Debian 的 Linux 发行版。 编译器 GCC 9 或更高版本(默认已安装&a…...
phpenc加密程序源码
免费扩展加密程序,类似于sg11加密,支持单个PHP(免费)文件以及批量PHP文件(ZIP压缩包格式)源码加密的保护平台,加密后的源码文件保持原有代码结构,可以跨平台运行,可以运行…...
学英语学Elasticsearch:04 Elastic integrations 工具箱实现对第三方数据源的采集、存储、可视化,开箱即用
📢📢📢: 先看关键单词,再看英文,最后看中文总结,再回头看一遍英文原文,效果更佳!! 关键词 ingestion 摄取 /ɪnˈdʒɛstʃən/ observability 可观察性 …...
2024.10.12 校招 实习 内推 面经
🛰️ :neituijunsir 交* 流*裙 ,内推/实习/校招汇总表格 1、校招 | 中车电动2025届校园招聘正式启动 校招 | 中车电动2025届校园招聘正式启动 2、校招 | 莱斯信息2025届校园招聘 校招 | 莱斯信息2025届校园招聘 3、招聘 | 中电熊猫2025…...
ios越狱脚本巨魔商店安装教程
使用爱思助手安装 安装爱思助手:在电脑上安装 iTunes 和爱思助手,并使用 Apple ID 登录2。 IPA 签名:打开爱思助手,选择工具箱中的 IPA 签名。点击添加 IPA 文件,选择下载的 TrollInstallerX.ipa 文件。选择使用 Apple…...
浅谈容灾技术方案详解
一、什么是容灾? 容灾指的是,在异地搭建一套或多套和主生产系统一样的IT系统,用于应对在系统因发生意外(自然灾害、人为灾害、设备系统故障等)造成业务影响的情况,达到尽量让生产业务损失最小的目的。 二…...
时序数据库InfluxDB—介绍与性能测试
目录 一、简述 二、主要特点 三、基本概念 1、主要概念 2、保留策略 3、连续查询 4、存储引擎—TSM Tree 5、存储目录 四、基本操作 1、Java-API操作 五、项目中的应用 六、单节点的硬件配置 七、性能测试 1、测试环境 2、测试程序 3、写入测试 4、查询测试 一…...
Python的循环
Python的循环 Python的循环有两种,分别是for…in循环和while循环。 for…in 循环 假设我们要循环输出一个列表里的元素: names [张三,李四,王五] for name in names:print(name)执行这段代码后,会依次打印names的每一个元素:…...
【机器学习】聚类评价指标之福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)
福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)是一种用于评估聚类结果与实际标签之间一致性的指标。FMI 值可以用于衡量聚类的准确性,特别是在有真值标签的监督评估场景中。 计算公式 FMI 的计算基于以下公式: 其中&#…...
分享一次面试经历
今天不只是分享面经,还分享一下主人公的整个面试经历,看看你是否会有相同的思路或者不同的见解,可以在评论区讨论一下: 问在项目里做了什么技术贡献。实施过程中,遇到哪些困难,怎么去思考解决的࿰…...
网络攻击行为可视化分析系统【数据分析 + 可视化】
一、系统背景 随着信息技术的快速发展,网络已成为现代社会不可或缺的一部分。然而,与此同时,网络攻击手段也日益多样化和复杂化,给企业和个人的信息安全带来了极大的威胁。传统的网络攻击分析方法往往依赖于人工分析和处理大量的…...
Qt 智能指针
Qt 智能指针 文章目录 Qt 智能指针QScopedPointer1. 自动删除对象2. 转移所有权3. 管理私有数据 QSharedPointer关键特性注意事项 QWeakPointer注意事项 QPointer QScopedPointer QScopedPointer 是 Qt 提供的一个智能指针,主要用于简化资源管理,防止内…...
CODESYS MODBUS TCP通信(禾川Q1 PLC作为MODBUS TCP从站)
禾川Q1 PLC MODBUS TCP 通信(PLC作为MODBUS TCP通信主站) 禾川Q1 PLC MODBUS TCP通信(CODESYS平台完整配置+代码)-CSDN博客文章浏览阅读28次。MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)_将matlab仿真导入plc-CSDN博客文章浏览阅读722次。本文详细介绍了如…...
10.STM32F407ZGT6-内部温度传感器
参考: 1.正点原子 前言: 本笔记的主要目的和意义就是,再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说,该温度传感器在…...
运维安全中心(堡垒机)
阿里云运维安全中心(Alibaba Cloud Operation and Maintenance Security, OMS,通常也称为“堡垒机”)是一款针对云上运维管理的安全解决方案。它专注于加强云环境中运维过程的安全性,确保对关键云资源和服务的访问可控、可审计&am…...
Linux OOM | Early OOM | 进程监视
注: 本文为 “Linux OOM” 相关文章合辑。 Linux OOM 终结者 译者:花名有孚 | 2015-07-21 08:47 现在是早晨 6 点钟。已经醒来的我正在总结到底是什么事情使得我的起床闹铃提前了这么多。我们的监控系统显示,Plumbr 服务出故障了。 现在我…...
【2024年华为OD机试】(A卷,100分)- 等和子数组最小和(Java JS PythonC/C++)
一、问题描述 题目描述 给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。 输入描述 第一行输入 m 接着输入m个数,表示此数组nums 数据范围:1<m&…...
NFS服务
nfs文件系统 NFS:NetworkFileSystem网络文件系统,基于内核的文件系统。 服务安装 不固定端口启动,会注册到rpcbind(固定端口)服务上, 局域网适用[rootvm ~]# yum -y install nfs-utils # 依赖安装rpcbind [ro…...
RabbitMQ 交换机、队列和路由键的命名规范
在 RabbitMQ 中,使用 Topic Exchange 模式时,交换机、队列和路由键的命名规范是非常重要的,尤其是在多环境和多微服务的场景中。合理的命名规范可以提高消息系统的可维护性、可扩展性以及可读性。以下是一些关于 Topic Exchange 模式中交换机…...
腾讯云AI代码助手编程挑战赛-刑说
作品简介 鉴于当代普法力度不够大,这个刑说可以帮助大家更好的普及法律知识 技术架构 采用了全后端分离的架构,前端使用Vue.js,腾讯云的AI服务处理自然语言理解与生成。 实现过程 开发环境、开发流程 系统:win11 开发工具&…...
【测试】持续集成CI/CD
近期更新完毕,建议关注收藏点赞~ 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…...
阿里云直播Web
官方文档:Web播放器SDK常见问题_视频点播(VOD)-阿里云帮助中心 bug:播流的不稳定,直播总会进入 onM3u8Retry 监听,用户端就会黑屏,(但其实并没有关播,正常关播进入的是pause这个监听࿰…...
DuckDB:PRAGMA语句动态配置数据库行为
PRAGMA语句是DuckDB从SQLite中采用的SQL扩展。PRAGMA命令可能会改变数据库引擎的内部状态,并可能影响引擎的后续执行或行为。本文介绍PRAGMA命令及其典型应用场景。 DuckDB PRAGMA介绍 在 DuckDB 中,PRAGMA 是一种编译指示(compiler directi…...
GO通过SMTP协议发送邮件
什么是SMTP协议 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送邮件的协议。当一个邮件服务器需要发送邮件给另一个邮件服务器时,它会使用SMTP协议与目标服务器建立连接,并传输邮件内容。SMTP协议的…...
轻量自高斯注意力机制LSGAttention模型详解及代码复现
模型背景 近年来,卷积神经网络(CNN)在高光谱图像分类领域取得了显著进展。然而,CNN面临 长距离关系建模 和 计算成本 增加的挑战。为解决这些问题,研究人员提出了基于 轻量自高斯注意(Light Self-Gaussian-Attention, LSGA) 机制的视觉转换器(Vision Transformer, VIT),旨…...
解读若依框架中的`@Excel` 和 `@Excels` 注解
文章目录 一、Excels 注解详解1.1 适用场景1.2 作用与好处 二、Excel 注解详解2.1 核心属性解析2.2 高级用法2.3 综合应用案例 三、总结 解读若依框架中的 Xss 注解博客:解读若依框架中的 Xss 注解 接下来我们将对若依框架中的 Excel 和 Excels 注解进行更加详细的…...
云商城--基础数据处理和分布式文件存储
第2章 基础数据处理和分布式文件存储 1.分布式文件存储系统Ceph学习 1).掌握Ceph架构 2).掌握Ceph组件 3).搭建Ceph集群(了解) 2.Ceph使用 1).基于Ceph实现文件上传 2).基于Ceph实现文件下载 3.SKU、SPU管理 1).掌握SKU和SPU关系 2).理解商品发…...
六十九:基于openssl实战验证RSA
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据加密和数字签名领域。在实际开发和学习过程中,理解 RSA 的工作原理和使用场景非常重要。本文将以 OpenSSL 工具为基础,通过实例操作来验证和理解 RSA 的…...
Three.js 用户交互:构建沉浸式3D体验的关键
文章目录 前言一、基本交互:鼠标与触摸事件二、高级交互:键盘控制与游戏手柄支持三、物理模拟与碰撞检测四、手势识别与多点触控五、增强现实(AR)与虚拟现实(VR)六、触觉反馈与震动效果七、语音控制八、眼球…...
Android车机DIY开发之学习篇(五)默认应用修改
Android车机DIY开发之学习篇(五)默认应用修改 android默认应用位置 sdk/packages/apps InitRC配置 应用安装的目录 /system/priv-app 该路径存放一些系统底层的应用,比如Setting,systemUI等。该目录中的app拥有较高的系统权限,而且如果要使…...
wordpress采集工具/网络seo哈尔滨
第二种...
四川省建设建设监理协会网站/怎么打广告宣传自己的产品
Frontend Knowledge Structure https://github.com/JacksonTian/fks 图片的形式具有诸多的不便。缺失源图的我们,无法为此图贡献些什么,随着时间的迁移,或许有些技术点会发生改变,所以有了这个GitHub项目。我们可以通过协作的方式…...
手机app网站制作/百度手机助手苹果版
WinDbg下载 推荐下载:https://down.52pojie.cn/Tools/Debuggers/ WinDbg Preview下载 这个很蛋疼,需要用到win10系统自带的应用商店下载 关于为什么,我去微软官网下载,他说我所在地区不提供下载??&…...
怎么自己制作个网站/水果店推广营销方案
文章目录MLpython稀疏矩阵的存储和表示CSR格式CSR格式🎈NNZCoordinate list (COO)Compressed sparse row (CSR, CRS or Yale format)🎈三个数组根据ROW_INDEX划分数组V或COL_INDEX数组名称demos in scipyegeg冗余分析Yale sparse matrixCSR编码效益分析&…...
做网站的职位叫什么/公司网站建设服务
在后端,我将货币值存储在Money类中,该类包装了BigDecimal,并且将舍入设置为使用等级8的一半.所有基本操作都正常工作并且按预期运行.但是我需要以2的比例向用户显示这些值,这会给我带来四舍五入的错误.例如,我在后端有这些值:a 109.11432b 9015.57069c 9124.6850…...
融水县建设局网站/公司宣传软文
前端技术周刊 2018-06-09 前端快爆 生态更新 Git 发现一个关于 Submodule 的安全漏洞,将可能导致任意代码执行漏洞,将 Git 客户端升级到 2.17.1 即可避免这样的安全问题。? W3C 网络内容可访问性指南的 2.1 版本已经进入 W3C 的推荐状态,新版…...