当前位置: 首页 > news >正文

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. 常见问题

  1. 缺少依赖库
    • 根据 CMake 输出的错误信息安装缺失的依赖库。
  2. CUDA 支持问题
    • 确保已安装 CUDA Toolkit 并正确配置环境变量。
  3. Python 绑定问题
    • 确保 Python 和 NumPy 已正确安装,并在 CMake 中正确配置路径。

相关文章:

Linux 环境下编译安装 OpenCV 4.8.x

在 Linux 环境下编译安装 OpenCV 4.8.x 需要安装一系列依赖库。以下是详细的步骤说明&#xff0c;并附上每个依赖库的作用解释。 1. 环境准备 操作系统 推荐使用 Ubuntu 20.04/22.04 或其他基于 Debian 的 Linux 发行版。 编译器 GCC 9 或更高版本&#xff08;默认已安装&a…...

phpenc加密程序源码

免费扩展加密程序&#xff0c;类似于sg11加密&#xff0c;支持单个PHP&#xff08;免费&#xff09;文件以及批量PHP文件&#xff08;ZIP压缩包格式&#xff09;源码加密的保护平台&#xff0c;加密后的源码文件保持原有代码结构&#xff0c;可以跨平台运行&#xff0c;可以运行…...

学英语学Elasticsearch:04 Elastic integrations 工具箱实现对第三方数据源的采集、存储、可视化,开箱即用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a; 先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 ingestion 摄取 /ɪnˈdʒɛstʃən/ observability 可观察性 …...

2024.10.12 校招 实习 内推 面经

&#x1f6f0;️ &#xff1a;neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 中车电动2025届校园招聘正式启动 校招 | 中车电动2025届校园招聘正式启动 2、校招 | 莱斯信息2025届校园招聘 校招 | 莱斯信息2025届校园招聘 3、招聘 | 中电熊猫2025…...

ios越狱脚本巨魔商店安装教程

使用爱思助手安装 安装爱思助手&#xff1a;在电脑上安装 iTunes 和爱思助手&#xff0c;并使用 Apple ID 登录2。 IPA 签名&#xff1a;打开爱思助手&#xff0c;选择工具箱中的 IPA 签名。点击添加 IPA 文件&#xff0c;选择下载的 TrollInstallerX.ipa 文件。选择使用 Apple…...

浅谈容灾技术方案详解

一、什么是容灾&#xff1f; 容灾指的是&#xff0c;在异地搭建一套或多套和主生产系统一样的IT系统&#xff0c;用于应对在系统因发生意外&#xff08;自然灾害、人为灾害、设备系统故障等&#xff09;造成业务影响的情况&#xff0c;达到尽量让生产业务损失最小的目的。 二…...

时序数据库InfluxDB—介绍与性能测试

目录 一、简述 二、主要特点 三、基本概念 1、主要概念 2、保留策略 3、连续查询 4、存储引擎—TSM Tree 5、存储目录 四、基本操作 1、Java-API操作 五、项目中的应用 六、单节点的硬件配置 七、性能测试 1、测试环境 2、测试程序 3、写入测试 4、查询测试 一…...

Python的循环

Python的循环 Python的循环有两种&#xff0c;分别是for…in循环和while循环。 for…in 循环 假设我们要循环输出一个列表里的元素&#xff1a; names [张三,李四,王五] for name in names:print(name)执行这段代码后&#xff0c;会依次打印names的每一个元素&#xff1a;…...

【机器学习】聚类评价指标之福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)

福尔克斯–马洛斯指数&#xff08;Fowlkes–Mallows Index, FMI&#xff09;是一种用于评估聚类结果与实际标签之间一致性的指标。FMI 值可以用于衡量聚类的准确性&#xff0c;特别是在有真值标签的监督评估场景中。 计算公式 FMI 的计算基于以下公式&#xff1a; 其中&#…...

分享一次面试经历

今天不只是分享面经&#xff0c;还分享一下主人公的整个面试经历&#xff0c;看看你是否会有相同的思路或者不同的见解&#xff0c;可以在评论区讨论一下&#xff1a; 问在项目里做了什么技术贡献。实施过程中&#xff0c;遇到哪些困难&#xff0c;怎么去思考解决的&#xff0…...

网络攻击行为可视化分析系统【数据分析 + 可视化】

一、系统背景 随着信息技术的快速发展&#xff0c;网络已成为现代社会不可或缺的一部分。然而&#xff0c;与此同时&#xff0c;网络攻击手段也日益多样化和复杂化&#xff0c;给企业和个人的信息安全带来了极大的威胁。传统的网络攻击分析方法往往依赖于人工分析和处理大量的…...

Qt 智能指针

Qt 智能指针 文章目录 Qt 智能指针QScopedPointer1. 自动删除对象2. 转移所有权3. 管理私有数据 QSharedPointer关键特性注意事项 QWeakPointer注意事项 QPointer QScopedPointer QScopedPointer 是 Qt 提供的一个智能指针&#xff0c;主要用于简化资源管理&#xff0c;防止内…...

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-内部温度传感器

参考&#xff1a; 1.正点原子 前言&#xff1a; 本笔记的主要目的和意义就是&#xff0c;再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器&#xff0c;可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说&#xff0c;该温度传感器在…...

运维安全中心(堡垒机)

阿里云运维安全中心&#xff08;Alibaba Cloud Operation and Maintenance Security, OMS&#xff0c;通常也称为“堡垒机”&#xff09;是一款针对云上运维管理的安全解决方案。它专注于加强云环境中运维过程的安全性&#xff0c;确保对关键云资源和服务的访问可控、可审计&am…...

Linux OOM | Early OOM | 进程监视

注&#xff1a; 本文为 “Linux OOM” 相关文章合辑。 Linux OOM 终结者 译者&#xff1a;花名有孚 | 2015-07-21 08:47 现在是早晨 6 点钟。已经醒来的我正在总结到底是什么事情使得我的起床闹铃提前了这么多。我们的监控系统显示&#xff0c;Plumbr 服务出故障了。 现在我…...

【2024年华为OD机试】(A卷,100分)- 等和子数组最小和(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个数组nums&#xff0c;将元素分为若干个组&#xff0c;使得每组和相等&#xff0c;求出满足条件的所有分组中&#xff0c;组内元素和的最小值。 输入描述 第一行输入 m 接着输入m个数&#xff0c;表示此数组nums 数据范围&#xff1a;1<m&…...

NFS服务

nfs文件系统 NFS:NetworkFileSystem网络文件系统&#xff0c;基于内核的文件系统。 服务安装 不固定端口启动&#xff0c;会注册到rpcbind&#xff08;固定端口&#xff09;服务上&#xff0c; 局域网适用[rootvm ~]# yum -y install nfs-utils # 依赖安装rpcbind [ro…...

RabbitMQ 交换机、队列和路由键的命名规范

在 RabbitMQ 中&#xff0c;使用 Topic Exchange 模式时&#xff0c;交换机、队列和路由键的命名规范是非常重要的&#xff0c;尤其是在多环境和多微服务的场景中。合理的命名规范可以提高消息系统的可维护性、可扩展性以及可读性。以下是一些关于 Topic Exchange 模式中交换机…...

腾讯云AI代码助手编程挑战赛-刑说

作品简介 鉴于当代普法力度不够大&#xff0c;这个刑说可以帮助大家更好的普及法律知识 技术架构 采用了全后端分离的架构&#xff0c;前端使用Vue.js&#xff0c;腾讯云的AI服务处理自然语言理解与生成。 实现过程 开发环境、开发流程 系统&#xff1a;win11 开发工具&…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...