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

Linux(Ubuntu24.04)源码编译安装OpenCV4.6.0

Linux(Ubuntu24.04)源码编译安装OpenCV4.6.0

本次安装是在WSL2的Ubuntu24.04环境下进行。

1、下载OpenCV 4.6.0 源码

下载opencv:

git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.6.0

下载opencv_contrib:

git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 4.6.0

2、安装依赖

安装构建OpenCV所需的各种工具和库。

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev

有可能会提示找不到有些包,例如libdc1394-22-dev,这些问题可能是由于仓库列表中没有这些软件包或者可能包的名称变了,改为libdc1394-dev

E: Package 'libtbb2' has no installation candidate
E: Unable to locate package libdc1394-22-dev

3、编译安装

# 进入opencv目录并创建build文件夹
cd opencv
mkdir build && cd build

# 编译
cmake -D OPENCV_GENERATE_PKGCONFIG=ON \
  -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
  -D WITH_GSTREAMER=ON \
  -D WITH_LIBV4L=ON \
  -D BUILD_opencv_python2=ON \
  -D BUILD_opencv_python3=ON \
  -D BUILD_TESTS=OFF \
  -D BUILD_PERF_TESTS=OFF \
  -D BUILD_EXAMPLES=OFF \
  -D CMAKE_BUILD_TYPE=RELEASE \
  -D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
  -D CMAKE_INSTALL_PREFIX=/usr/local ..

make -j16

# 安装
make install

4、编译过程中遇到的问题

4.1 找不到mpi.h

问题描述: 这个错误提示表明在编译过程中找不到mpi.h头文件,这意味着缺少MPI(Message Passing Interface)相关的库和开发文件。通常,这种情况可以通过安装相应的MPI实现(如OpenMPI或MPICH)及其开发文件来解决。

/usr/include/hdf5/openmpi/H5public.h:67:10: fatal error: mpi.h: No such file or directory
   67 | #include <mpi.h>

解决方法:
首先查找查找mpi.h在哪里,如果没有安装,则先安装。

$ find /usr -name mpi.h
/usr/lib/x86_64-linux-gnu/openmpi/include/mpi.h
/usr/lib/x86_64-linux-gnu/fortran/gfortran-mod-15/openmpi/mpi.h

# 如果没有则安装该库
$ sudo apt install libopenmpi-dev

找到路径后,配置临时环境变量:

export CPLUS_INCLUDE_PATH=/usr/lib/x86_64-linux-gnu/openmpi/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=/usr/lib/x86_64-linux-gnu/openmpi/include:\$C_INCLUDE_PATH
4.2 找不到openjpeg.h

问题描述: 这个错误提示表明编译器找不到 openjpeg.h 头文件,这意味着缺少 OpenJPEG 库及其开发文件。OpenJPEG 是一个用于处理 JPEG 2000 图像格式的开源库。

fatal error: openjpeg.h: No such file or directory
   13 | #include <openjpeg.h>

解决方法:
首先查找查找openjpeg.h在哪里,如果没有安装,则先安装。

$ find /usr -name openjpeg.h
/usr/include/openjpeg-2.5/openjpeg.h

# 如果没有则安装该库
sudo apt install libopenjp2-7-dev

找到路径后,配置临时环境变量:

export CPLUS_INCLUDE_PATH=/usr/include/openjpeg-2.5:\$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=/usr/include/openjpeg-2.5:\$C_INCLUDE_PATH
4.3 ffmpeg宏定义问题

问题描述: 这个错误提示表明代码中使用了旧版本的 FFmpeg API,其中 CODEC_ID_H264 已被弃用,并且在较新版本的 FFmpeg 中应使用 AV_CODEC_ID_H264。这种情况通常出现在代码库没有及时更新以适应 FFmpeg 的 API 变化时。

/mnt/d/wsl_workspace/opencv/opencv/modules/videoio/src/ffmpeg_codecs.hpp:81:26: error: ‘CODEC_ID_H264’ was not declared in this scope; did you mean ‘AV_CODEC_ID_H264’?
   81 | #define AV_CODEC_ID_H264 CODEC_ID_H264

解决方法:
可以修改opencv/modules/videoio/src/ffmpeg_codecs.hpp中相关的宏定义,将#define AV_CODEC_ID_H264 CODEC_ID_H264改为#define AV_CODEC_ID_H264 AV_CODEC_ID_H264,其它宏同理,都加上AV_

#ifndef FFMPEG_CODECS_HPP
#define FFMPEG_CODECS_HPP

// Remove the old macro definition and use the new one directly
//#define AV_CODEC_ID_H264 CODEC_ID_H264
#define AV_CODEC_ID_H264 AV_CODEC_ID_H264

#endif // FFMPEG_CODECS_HPP

在这里插入图片描述

4.4 其它问题

通常就是一些OpenCV的依赖包问题,例如找不到包、版本不匹配等等,逐步调试编译即可。

相关文章:

  • redis的应用,缓存,分布式锁
  • C语言——深入理解指针(2)(数组与指针)
  • 第三天面试题
  • 迅速闭合抽气止回阀的安装、维护及使用要点-耀圣
  • llama3 微调教程之 llama factory 的 安装部署与模型微调过程,模型量化和gguf转换。
  • Java Web开发实战与项目——Spring Security与权限管理实现
  • Pycharm中断点使用技巧
  • JavaAPI(字符串 正则表达式)
  • Java基础专项复习5——异常
  • 全局动态组件uniapp(vue)
  • ubuntu22.04离线安装nginx
  • 用promptfoo做大模型安全性测评
  • P8598 [蓝桥杯 2013 省 AB] 错误票据
  • 深入理解ES6核心特性:现代JavaScript开发的基石
  • 用WebSocket改造优化若依在线用户实时监控
  • WLAN无线2.4G/5G频段划分和可用信道
  • 基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
  • 使用useVModel简化 Vue 组件中 v-model 的实现
  • 如何创建自定义权限的kubeconfig
  • springboot399-中文社区交流平台(源码+数据库+纯前后端分离+部署讲解等)
  • 腾讯一季度营收增长13%,马化腾:战略性的AI投入将带来长期回报
  • 【社论】公平有序竞争,外卖行业才能多赢
  • 国台办:80年前台湾重归中国版图,80年后不可能让台湾分裂出去
  • 习近平同巴西总统卢拉共同出席合作文件签字仪式
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准
  • 专访|导演刘江:给谍战题材注入现实主义的魂