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)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/499790c069454d5f9c0ede0328db5688.png#pic_center)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 }…...
服务器记录所有用户docker操作,监控删除容器/镜像的人
文章目录 使用场景安装auditd添加docker审计规则设置监控日志大小与定期清除查询 Docker 操作日志查看所有用户,所有操作日志查看特定用户的 Docker 操作查看所有用户删除容器/镜像日志过滤特定时间范围内日志 使用场景 多人使用的服务器,使用的docker …...
关于使用天地图、leaflet、ENVI、Vue工具实现 前端地图上覆盖上处理的农业地块图层任务
1.项目框架搭建 项目地址:Webgis: 一个关于webgis、天地图、Leaflet、Vue、数据库的学习框架。 ①git到本地,vscode打开。 ② 配置后端 搜索下载MySQL插件(前提:电脑中装有MySQL才可应用)。 连接数据库。 配置基本…...
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 在现代社会…...
用 React 编写一个笔记应用程序
这篇文章会教大家用 React 编写一个笔记应用程序。用户可以创建、编辑、和切换 Markdown 笔记。 1. nanoid nanoid 是一个轻量级和安全的唯一字符串ID生成器,常用于JavaScript环境中生成随机、唯一的字符串ID,如数据库主键、会话ID、文件名等场景。 …...
如何离线安装dockerio
如何离线安装dockerio 一、下载Docker离线安装包二、上传离线安装包三、解压安装包四、复制文件到系统目录五、配置Docker服务六、设置文件权限并重新加载配置七、启动Docker服务八、设置开机自启动九、验证安装Docker是一个开源的容器化平台,用于开发、发布和运行应用程序。离…...
LocalDateTime序列化(跟redis有关)
使用过 没成功,序列化后是[2024 11 10 17 22 20]差不多是这样, 反序列化后就是: [ 2024 11 10.... ] 可能是我漏了什么 这是序列化后的: 反序列化后: 方法(加序列化和反序列化注解)&…...
【redis】如何跑
在 Windows 上配置 Redis 需要一些额外的步骤,因为 Redis 官方并没有为 Windows 提供原生支持。不过,可以通过以下方法来安装和配置 Redis。 方法一:使用 Windows 版 Redis(非官方版本) 下载 Redis for Windows Redis…...
Scala学习记录,全文单词统计
package test32 import java.io.PrintWriter import scala.io.Source //知识点 // 字符串.split("分隔符":把字符串用指定的分隔符,拆分成多个部分,保存在数组中) object test {def main(args: Array[String]): Unit {//从文件1.t…...
【MyBatis】验证多级缓存及 Cache Aside 模式的应用
文章目录 前言1. 多级缓存的概念1.1 CPU 多级缓存1.2 MyBatis 多级缓存 2. MyBatis 本地缓存3. MyBatis 全局缓存3.1 MyBatis 全局缓存过期算法3.2 CacheAside 模式 后记MyBatis 提供了缓存切口, 采用 Redis 会引入什么问题?万一遇到需强一致场景&#x…...
学习ASP.NET Core的身份认证(基于Session的身份认证3)
开源博客项目Blog中提供了另一种访问控制方式,其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式,测试程序中直接复用开源博客项目Blog中的相关类及接口定义,并在其上调整判断逻辑。 首先是接口A…...
宁夏住房和城乡建设部网站/搜索引擎推广方式有哪些
天赋和努力都不是成功的必要条件?成功属于幸运的人?那么你是否抓住了自己的职场幸运时刻?如何追求激情与意义创造价值撩到职场好运气? 今天给大家介绍“钛媒体72问”——专家分享课【坦白讲】的一位讲师。她就是享有国内外称赞的…...
jsp网站开发学习心得/网站流量来源
本节书摘来自异步社区《Adobe Premiere Pro CS5经典教程》一书中的第1课,第1.3节,作者 【美】Adobe公司 ,译者 许伟民,袁鹏飞,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.3 提供标准的数字视频工作流 用…...
如何做简单网站首页/seo收索引擎优化
介绍机器学习中的分类问题是我们给出了一些输入(独立变量),并且我们必须预测一个离散目标。离散值的分布极有可能是非常不同的。由于每个类的差异,算法往往偏向于现有的大多数值,而对少数值的处理效果不好。类频率的这种差异影响模型的整体可…...
制作音乐排行榜html5/如何优化网站首页
一、ArrayList概述 首先我们来说一下ArrayList是什么?它解决了什么问题?ArrayList其实是一个数组,但是有区别于一般的数组,它是一个可以动态改变大小的动态数组。ArrayList的关键特性也是这个动态的特性了,ArrayList的…...
合作客户北京网站建设/如何网络营销
官网 http://wproxy.org/whistle/ 安装与启动 安装Node Windows或Mac系统,访问https://nodejs.org/,安装LTS版本的Node,默认安装即可 安装后检查 $ node -v安装whistlenpm install -g whistle或者使用镜像安装 npm install whistle -g --r…...
网站设计的一般流程是什么/网站推广软件下载安装免费
主要内容包括:1. 回归模型2. 测量数据3. 回归分析4. 验证5. 葡萄酒质量/等级6. 回归器7. 分析结果8. 回归模型参数9. 5-fold验证10. 特征修改11. 增广特征12. 示例13. 常数模型14. 单回归模型15. 基本回归16. 增广回归17. 具有增广特征的回归模型完整原文及代码下载…...