Ubuntu20.04 由源码编译安装opencv3.2 OpenCV
Ubuntu20.04 由源码编译安装opencv3.2.0
获取 opencv 及opencv_contrib源代码
创建目录以存放opencv及opencv_contrib源代码
mkdir ~/opencv3.2.0
cd ~/opencv3.2.0
获取opencv源代码并切换到对应tag
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.2.0
cd ..
获取opencv_contrib源代码并切换到对应tag
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 3.2.0
cd ..
编译安装
创建构建目录
cd ~/opencv3.2.0/opencv
mkdir build && cd build
配置 CMake
cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.2.0 \-D OPENCV_EXTRA_MODULES_PATH=~/opencv_builds/opencv_contrib-3.2.0/modules \-D ENABLE_PRECOMPILED_HEADERS=OFF .. #不添加这一句编译时会出现/usr/include/c++/9/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录的报错信息
参数说明:
- CMAKE_BUILD_TYPE=Release
- 这个参数指定构建类型。
Release意味着编译器将优化生成的代码,去除调试信息,使得最终的程序运行得更快。这是生产环境中推荐的设置,相对于Debug,Release编译的程序执行效率更高,但不利于调试。
- 这个参数指定构建类型。
- CMAKE_INSTALL_PREFIX=/usr/local/opencv3.2.0
- 这个参数指定安装路径。
/usr/local/opencv3.2.0表示 OpenCV 将被安装在这个目录下。通常默认安装在/usr/local,但指定一个包含版本号的子目录可以帮助管理不同版本的 OpenCV。
- 这个参数指定安装路径。
- OPENCV_EXTRA_MODULES_PATH=~/opencv_builds/opencv_contrib-3.2.0/modules
- 此参数指定额外模块的路径,这里是 OpenCV 的贡献模块(contrib modules)。这些模块不包含在主 OpenCV 仓库中,提供了额外的功能和实验性算法。通过提供这个路径,你可以在构建 OpenCV 时包含这些额外的模块。
- ENABLE_PRECOMPILED_HEADERS=OFF
- 这个选项用于控制是否使用预编译头文件。预编译头文件可以加快编译过程,但在某些情况下可能会引起问题,比如在不同的构建环境间迁移代码时。设置为
OFF可以提高代码的可移植性,尤其是在有多个不同编译环境或者不同的编译器版本时。
- 这个选项用于控制是否使用预编译头文件。预编译头文件可以加快编译过程,但在某些情况下可能会引起问题,比如在不同的构建环境间迁移代码时。设置为
- …
- 这表示
cmake将在当前目录的上一级目录中查找CMakeLists.txt文件。这是启动构建过程的配置脚本,包含了所有必要的构建信息。
- 这表示
编译并安装
make -j$(nproc)sudo make install
- 安装成功,如下:安装路径为 CMake配置时设置的目录
编译报错解决
/usr/include/c++/9/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录

报错原因
这个编译错误通常表明在你的系统中找不到标准库文件 stdlib.h。这种情况可能是因为系统缺少某些必要的开发包或者环境变量配置不当,导致编译器无法定位到这些标准头文件。此外,由于你使用的是较新的 Ubuntu 版本(20.04)和可能较新的编译器,而 OpenCV 3.2.0 是一个较旧的版本,它可能不完全兼容最新的编译器或其默认配置,这也可能是导致找不到头文件的原因之一。
解决方法
-
禁用预编译头文件
-
在配置CMake的时候添加如下指令:
-D ENABLE_PRECOMPILED_HEADERS=OFF -
例如:
cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.2.0 \-D OPENCV_EXTRA_MODULES_PATH=~/opencv_builds/opencv_contrib-3.2.0/modules \-D ENABLE_PRECOMPILED_HEADERS=OFF .. #不添加这一句编译时会出现/usr/include/c++/9/cstdlib:75:15: fatal error: stdlib.h: 没有那个文件或目录的报错信息
OpenCV 代码中使用的 FFmpeg 库宏定义与最新版 FFmpeg 库中的定义不一致

报错原因
在安装并编译 OpenCV 3.2.0 版本时,出现的编译错误主要是由于 OpenCV 代码中使用的 FFmpeg 库宏定义与最新版 FFmpeg 库中的定义不一致所致。具体来说,原有的宏 CODEC_FLAG_GLOBAL_HEADER 和 AVFMT_RAWPICTURE 在较新的 FFmpeg 版本中已被重命名或废弃,从而导致编译失败。这些错误表明存在 API 不兼容的问题,即 OpenCV 的旧代码与新版本 FFmpeg 的接口不匹配。
CODEC_FLAG_GLOBAL_HEADER未声明:- 在旧版本的 FFmpeg 中,
CODEC_FLAG_GLOBAL_HEADER用于设置编码器标志,指示编码器在输出文件中生成全局头部信息,而不是每个输出帧中都包含头部信息。 - 新版本的 FFmpeg 将此宏重命名为
AV_CODEC_FLAG_GLOBAL_HEADER。由于 OpenCV 源码没有跟进这一变更,因此在编译时未找到原有宏名,导致编译错误。
- 在旧版本的 FFmpeg 中,
AVFMT_RAWPICTURE未声明:AVFMT_RAWPICTURE在旧版 FFmpeg 中用于标识输出格式(封装格式),允许直接将未压缩的视频帧写入媒体文件,这在新版本中已被废弃或功能已改变。- 由于 FFmpeg 更新后移除了此宏,当 OpenCV 代码尝试使用它时,同样导致了编译错误。
解决方法
-
打开源代码文件:
- 找到并打开
cap_ffmpeg_impl.hpp文件。 - 路径如下:
/home/lyb/opencv3.2.0/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp
- 找到并打开
-
添加宏定义:
-
在文件最开始的部分(通常在包含头文件之后)添加以下宏定义:
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) #define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER #define AVFMT_RAWPICTURE 0x0020 -
这些定义将重新引入旧宏,以确保代码兼容当前的 FFmpeg 版本。
-
C++ 和 Python 接口间的类型不匹配

报错原因
当在 Ubuntu 20.04 上从源代码编译安装 OpenCV 3.2 时,遇到的编译错误表明 cv2.cpp 文件在编译过程中出现问题。特别是,错误提示集中在 cv2.cpp.o 的生成上,这是 Python 接口文件的编译输出对象。此错误可能是由于 C++ 和 Python 接口间的类型不匹配或者 API 已经更新而代码未跟进引起的。
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:329: modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1- 这一行表示在执行编译命令时,处理
cv2.cpp文件时遇到错误,导致无法成功生成对象文件.o。
- 这一行表示在执行编译命令时,处理
make[1]: *** [CMakeFiles/Makefile2:11856: modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2- 此行表明编译整个 Python 模块时遇到问题,且因为依赖的部分编译失败,整个模块编译无法继续。
make: *** [Makefile:163: all] Error 2- 最顶层的 Makefile 在尝试完成所有编译任务时遇到了阻碍,整个构建进程因此终止。
解决方法
- 在cv2.cpp中找到对应代码行(/home/lyb/opencv3.2.0/opencv/modules/python/src2),如下:
char* str = PyString_AsString(obj);
- 将其修改为:
char* str = (char *)PyString_AsString(obj);
系统环境变量配置
编辑.bashrc文件
sudo vim .bashrc
环境变量设置
export PATH=/usr/local/opencv3.2.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/opencv3.2.0/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opencv3.2.0/lib/pkgconfig #opencv4默认不启用pkgconfig,需要在CMake配置时开启
参数含义解释:
-
export PATH=/usr/local/opencv3.2.0/bin:$PATH:PATH是一个环境变量,用于定义操作系统搜索可执行文件的目录列表。当你在命令行中输入一个命令时,系统会按照PATH环境变量定义的顺序来搜索这些目录,以找到可执行文件。- 此命令将 OpenCV 的
bin目录/usr/local/opencv3.2.0/bin添加到现有的PATH变量之前。这意味着系统会首先在此目录中查找可执行文件,这对于使用 OpenCV 提供的各种工具和示例程序非常重要。 - 通过将 OpenCV 的
bin目录添加到PATH,你可以从任何位置启动终端并直接运行 OpenCV 的可执行文件,而无需输入完整的路径。
-
export LD_LIBRARY_PATH=/usr/local/opencv3.2.0/lib:$LD_LIBRARY_PATH:LD_LIBRARY_PATH是一个环境变量,用于定义动态链接器搜索共享库时的目录列表。- 此命令将 OpenCV 的
lib目录/usr/local/opencv3.2.0/lib添加到现有的LD_LIBRARY_PATH环境变量之前。这确保了在运行依赖 OpenCV 库的程序时,系统能够在这个目录中优先查找所需的动态库(.so 文件)。 - 设置
LD_LIBRARY_PATH对于确保程序能找到正确版本的动态库非常重要,尤其是在系统中存在多个版本的库时。
-
export PKG_CONFIG_PATH=/usr/local/opencv3.2.0/lib/pkgconfig:PKG_CONFIG_PATH是一个环境变量,用于指定pkg-config工具搜索其.pc文件的路径。.pc文件包含了使用库(如编译器和链接器标志)所需的元数据。- 通过设置
PKG_CONFIG_PATH环境变量为/usr/local/opencv3.2.0/lib/pkgconfig,你告诉pkg-config工具在编译依赖 OpenCV 的应用程序时,首先在此目录中查找 OpenCV 的配置文件。 - 这对于开发和编译依赖 OpenCV 的第三方应用程序非常重要,因为它简化了编译和链接过程,确保了使用正确的编译器标志和链接选项。
刷新环境变量
source ~/.bashrc
验证是否设置成功
pkg-config --modversion opencv
- 应输出3.2.0

- 自此 ubuntu20.04 opencv3.2安装成功
相关文章:
Ubuntu20.04 由源码编译安装opencv3.2 OpenCV
Ubuntu20.04 由源码编译安装opencv3.2.0 获取 opencv 及opencv_contrib源代码 创建目录以存放opencv及opencv_contrib源代码 mkdir ~/opencv3.2.0 cd ~/opencv3.2.0获取opencv源代码并切换到对应tag git clone https://github.com/opencv/opencv.git cd opencv git checkou…...
A058-基于Spring Boot的餐饮管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式
1、介绍 在软件开发领域,尤其是企业级应用开发中,灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目,如何高效地与后端数据库进行交互,以及如何提供多样化的服务访问方式,是开发者需要深入考虑的问题。…...
Linux——命名管道及日志
linux——进程间通信及管道的应用场景-CSDN博客 文章目录 目录 文章目录 前言 一、命名管道是什么? 理解: 2、编写代码 makefile 管道封装成类,想用中管道时只需要调用实例化 读端 写端 日志 1、日志是什么? 2、日志有什么&#x…...
Flink 常见面试题
1、Flink 的四大特征(基石) checkpoin基于Chandy-Lamport算法实现了分布式一致性快照提供了一致性的语义 state丰富的StateAPI time实现了Watermark机制,乱序数据处理,迟到数据容忍 window开箱即用的滚动,滑动会话窗口…...
rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable
解决方法: 1、先测量pcf8563电源电压,是否满足要求。 2、pcf8563首次操作。第一次读取pcf8563的时间,未初始化,非法,芯片门槛电压检测配置不合理。使用hwclock命令写入一次,即可解决。 hwclock -f /dev/…...
(简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型
摘要: 本文将指导您如何部署一个本地AI大语言模型聊天系统,使用Chatbox AI客户端应用和grok-beta大模型,以实现高效、智能的聊天体验。 引言: 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…...
MAUI APP开发蓝牙协议的经验分享:与跳绳设备对接
在开发MAUI应用程序时,蓝牙协议的应用是一个重要的环节,尤其是在需要与外部设备如智能跳绳进行数据交换的场景中。以下是我在开发过程中的一些经验和心得,希望能为你的项目提供帮助。 1. 蓝牙协议基础 蓝牙协议是无线通信的一种标准&#x…...
最新版Node.js下载安装及环境配置教程
目录 初识:Node.js 一、下载:Node.js 二、安装:Node.js 1.下载【node.js】压缩包安装文件 2.解压下载的安装包 3.打开解压的【node-v22.11.0-x64】文件夹 4.双击启动安装程序 5.点击【Next】 6.勾选【I accept the terms in the Lic…...
51c自动驾驶~合集39
我自己的原文哦~ https://blog.51cto.com/whaosoft/12707676 #DiffusionDrive 大幅超越所有SOTA!地平线DiffusionDrive:生成式方案或将重塑端到端格局? 近年来,由于感知模型的性能持续进步,端到端自动驾驶受到了来…...
单链表基础操作
文章目录 abstract定义结点结构初始化链表遍历链表求表长查找结点根据序号查找结点根据值查找结点 插入结点首尾位置插入一般位置插入(通用插入)找到尾元素|尾指针相关操作 删除结点 abstract 单链表是一种简单的动态数据结构,它由一系列结点组成,每个结…...
Asp.net MVC在VSCore中的页面的增删改查(以Blog项目为例),用命令代码
在VSCore中的页面的增删改查(以Blog项目为例) 1.创建项目(无解决方案)复杂项目才需要 dotnet new mvc -o Blog2.控制器 BlogsController.cs 控制器(Controller)名字和视图(View)中的文件名要一模一样 u…...
【Leecode】Leecode刷题之路第66天之加一
题目出处 66-加一-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 66-加一-官方解法 方法1:找出最长的后缀9 思路: 代码示例:(Java&#…...
使用 VLC 在本地搭建流媒体服务器 (详细版)
提示:详细流程 避坑指南 Hi~!欢迎来到碧波空间,平时喜欢用博客记录学习的点滴,欢迎大家前来指正,欢迎欢迎~~ ✨✨ 主页:碧波 📚 📚 专栏:音视频 目录 借助VLC media pl…...
Ubuntu 常用解压与压缩命令
.zip文件 unzip FileName.zip # 解压 zip DirName.zip DirName # 将DirName本身压缩 zip -r DirName.zip DirName # 压缩,递归处理,将指定目录下的所有文件和子目录一起压缩 zip DirName.zip DirName 行为: 只压缩 DirName 目录本身ÿ…...
【深度学习】四大图像分类网络之AlexNet
AlexNet是由Alex Krizhevsky、Ilya Sutskever(均为Hinton的学生)和Geoffrey Hinton(被誉为”人工智能教父“,首先将反向传播用于多层神经网络)在2012年ImageNet图像分类竞赛中提出的一种经典的卷积神经网络。AlexNet在…...
Day1——GitHub项目共同开发
MarkDowm解释 Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML代码。Markdown的目的是让文档的编写和阅读变得更加容易,同时也不失HTML的强大功能。以下是Markdown的一些基本概念和用法&a…...
基于PHP的香水销售系统的设计与实现
摘 要 时代科技高速发展的背后,也带动了经济的增加,人们对生活质量的要求也不断提高。香水作为一款在人际交往过程中,给对方留下良好地第一印象的产品,在生活中也可以独自享受其为生活带来的点缀。目前香水市场体量庞大ÿ…...
A-star算法
算法简介 A*(A-star)算法是一种用于图形搜索和路径规划的启发式搜索算法,它结合了最佳优先搜索(Best-First Search)和Dijkstra算法的思想,能够有效地寻找从起点到目标点的最短路径。A*算法广泛应用于导航、…...
前端用原生js下载File对象文件,多用于上传附件时,提交之前进行点击预览,或打开本地已经选择待上传的附件列表
用于如上图场景,已经点击选择了将要上传的文件,在附件列表里面用户希望点击下载文件,以核实自己是否选中了需要上传的文件,此刻就需要 用到下面的方法: // 下载File对象文件 downloadByFileObject(file, { fileName }…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
