Linux系统中交叉编译opencv库

目标:将opencv进行交叉编译,使其能在rk3326板子上运行使用。
环境:
ubuntu:18.04
opencv:4.5.4
opencv源码从挂网下载:opencv源码下载地址
交叉编译链:gcc-arm-10.3-linux-gun

一.环境准备

1.交叉编译链我配置在/opt/gcc-arm-10.3-linux-gun中,可根据实际情况自行配置目录;
2.opencv源码我下载后解压在家目录下的“software/opencv_linux/opencv-4.5.4”中;
3.下载“opencv_contrib-4.5.4”,下载这个是由于特定项目要用到,如果没有特殊要求,可以不用(后面会介绍这个contrib配置在哪)。
4.下载“boostdesc_bgm.i-main”,这个也是项目特定要求需要,如果没有特殊要求,可以不用。

二.依赖库安装

1.安装cmake,安装命令:

	suod apt-get install cmake
	suod apt-get install cmake-qt-gui

2.安装依赖库,安装命令:

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install  libgtk-3-dev libtiff5-dev
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install libopenexr-dev libwebp-dev
sudo apt-get install libcanberra-gtk-module

3.安装python环境,某些依赖库需要python环境,不然编译不过,安装命令:

	sudo apt install python3-dev
	sudo apt install python3-numpy

4.将boostdesc_bgm.i-main 下的文件复制到“opencv_contrib/modules/xfeatures2d/src/” (前文环境准备中的第四步),此步骤为特定项目,解决下载慢问题,离线下载,如果没有特殊要求可以跳过此步骤;

三.配置make

1.执行命令打开cmake工具:

sudo cmake-gui

cmake配置
分别输入source code源代码路径和 build生成路径,然后点击“Configure”按钮。
在这里插入图片描述
选择第四个选项,进行自主配置:
注意,这里一定改设置你准备上板子的交叉编译链,别选错编译链,到时候调用出错,那就白编译了。
在这里插入图片描述
2.接下来就是配置cmake,
在这里插入图片描述
(1)勾选"Advanced";
(2)找到“CMAKE BUILD TYPE”,设置值为“Release”;
(3)找到“CMAKE EXE LINKER FLAGS”,设置值为“-pthread -ldl -rt”;
在这里插入图片描述
(4)找到“BUILD_ZLIB”并勾选;
在这里插入图片描述
(5)找到“CMAKE_INSTALL_PREFIX”,设置安装目录,我这里设置值为“/usr/local/opencv4.5.4”;
在这里插入图片描述
(6)找到“OPENCV_EXTRA_MODULES_PATH”,设置值为MODULES所在目录。注意:此步骤是本项目特定要求的,参见前文准备环境中的第三条,如果没有特定要求,跳过此步;
在这里插入图片描述
(7)点击“Configure”按钮重新配置,执行需要一段时间,静待状态栏提示“Configuring done”;
(8)再点击“Generate”按钮生成makefile文件,执行需要一段时间,静待状态栏提示“Generating done”;
在这里插入图片描述
至此,opencv源码包目录下的build文件夹中makefile文件已经生成,关闭cmake工具,可以准备make编译了。
在这里插入图片描述

四.make编译

1.进入到上文中的opencv中的build目录下,执行命令:

make -j4

2.编译过程中可能会出现多种报错
(1)如下“system Error:Permission denied”这是没有权限
在这里插入图片描述
改用“sudo make -j4”命令;
(2)遇到错误“错误: #error "No suitable threading library available.”
在这里插入图片描述
解决方法:在opencv源码路径下的“opencv-4.5.4/3rdparty/protobuf/src/google/protobuf/stubs/common.cc” 文件中的开始处,有很多包含的头文件,在此处添加这一行
#define HAVE_PTHREAD
在这里插入图片描述
(3)继续重新编译尝试,遇到错误如下:
在这里插入图片描述
这是交叉编译工具链有漏洞,按报错文件指向,在交叉编译工具链的目录下找到“features.h”,打开该头文件,在#if defined前面 加上这句
#define _FILE_OFFSET_BITS 64
在这里插入图片描述
(4)再次重新编译尝试,遇到报错:“undefinedreference to png do expand palette rgba8 neon”
在这里插入图片描述
解决办法:在opencv源码目录下找到“3rdparty/libpng/pngpriv.h”头文件,找到
#if (defined(ARM_NEON) || defined(__ARM_NEON)) &&
将其改为:
#if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) &&
在这里插入图片描述
以上,可能还会出现其他错误的话,就要根据报错信息网上查找解决。

3.编译完成
在这里插入图片描述
4.执行安装命令:
sudo make install
安装完成后,可以发现opecv编译好的so库已经在你指定的安装目录下了。我指定安装在“/usr/local/opencv4.5.4/”下,该目录下lib中就是opencv的各个so库。
在这里插入图片描述
至此,opencv交叉编译完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769162.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【RT摩拳擦掌】如何构建RT AVB switchendpoint平台

【RT摩拳擦掌】如何构建RT AVB switch&endpoint平台 一,文档简介二,平台构建2.1 软硬件情况2.2 配置RT1170 AVB端点2.2.1 1块MIMXRT1170开发板做talker配置2.2.2 2块MIMXRT1170开发板做listener配置 2.3 AVB Switch 配置2.3.1 MOTU AVB Switch2.3.2 …

Ansys Zemax|场曲跟畸变图的前世今生

实现 OpticStudio通过在X和Y方向(弧矢和子午方向)的傍轴光线追踪确定近轴图像平面的Z坐标,并测量该近轴焦平面与系统图像平面的Z坐标之间的距离。 切向数据是沿Z轴从图像平面到近轴图像平面在切向(YZ)平面测量的距离…

【LeetCode刷题】3099.哈沙德数

题目链接 3099. 哈沙德数 - 力扣(LeetCode) 实现代码 int sumOfTheDigitsOfHarshadNumber(int x) {int sum 0;for(int temp x; temp; temp / 10)sum temp % 10;return x%sum ? -1 : sum; }

魔行观察-AI数据分析>>勒泰中心购物中心

摘要 本报告基于 魔行观察 搜集整理的数据,对勒泰中心购物中心的营业状态、商户构成、业态分布以及消费者评价进行了详细分析。 商场概览 勒泰中心是一个正常营业的购物中心,自2013年开业以来,已成为当地居民和游客的重要购物和休闲场所。…

3D一览通优化供应链协同,加速产品设计研发和上市

在现代企业管理中,供应链管理无疑占据着举足轻重的地位。它不仅是企业资源优化配置的基石,更是企业降低成本、提高效率、满足客户需求、保持市场竞争力的关键环节。对于工业企业来说,供应链的高效运作尤其重要。 然而,在实际操作…

一篇文章用python GUI构建学生管理系统

引言 通过使用Python,我们可以利用其简洁和功能强大的特性,结合Tkinter提供的GUI开发能力,快速构建一个直观且易于使用的学生管理系统。 准备工作 在开始之前,确保你的开发环境中已经安装了 PythonTkinter库 安装完成后&…

SQLServer:从数据类型 varchar 转换为 numeric 时出错。

1.工作要求 计算某两个经纬度距离 2.遇到问题 从数据类型 varchar 转换为 numeric 时出错。 3.解决问题 项目版本较老,使用SQLServer 2012 计算距离需执行视图,如下: SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO ALTER view vi_ord…

2024年迄今最热门的10款网络安全工具和产品

今年上半年,利用生成式人工智能(GenAI)的网络安全工具继续激增。许多供应商正在利用GenAI的功能来自动化安全运营中心(SOC)的工作,特别是在自动化日常活动方面,如收集威胁信息和自动创建查询。 …

Elasticsearch (1):ES基本概念和原理简单介绍

Elasticsearch(简称 ES)是一款基于 Apache Lucene 的分布式搜索和分析引擎。随着业务的发展,系统中的数据量不断增长,传统的关系型数据库在处理大量模糊查询时效率低下。因此,ES 作为一种高效、灵活和可扩展的全文检索…

Profibus DP主站转Modbus网关连接伺服与电机通讯

在工业自动化领域,将Profibus DP主站转Modbus网关(XD-MDPBM20)用于连接伺服与电机通讯是一种常见且重要的应用方式。当使用Profibus DP主站转Modbus网关(XD-MDPBM20)连接伺服与电机进行通讯时,可以参考以下…

强连通分量

强连通分量 强连通定义 有向图 G G G 的强连通是指 G G G 中任意两个节点都可以直接或间接到达。 下方两幅图都是强连通。一个特殊一点,任意两点都可以直接到达;一个则是最常见的强连通图。 特殊强连通图,任意两点都可以直接到达 常见的…

虚拟机启动失败 请进行修复 关闭hyper-v

场景 win11开启夜神模拟器时弹出此提示。点击关闭hyper-v并重启电脑后仍然不行。 解决方法 关闭 Windows安全中心 的 内存完整性 后重启电脑恢复正常。 补充 由于我这里除了会用到夜神模拟器,还会用到docker,而docker又依赖hyper-v,不…

YOLOv5初学者问题——用自己的模型预测图片不画框

如题,我在用自己的数据集训练权重模型的时候,在训练完成输出的yolov5-v5.0\runs\train\exp2目录下可以看到,在训练测试的时候是有输出描框的。 但是当我引用训练好的best.fangpt去进行预测的时候, 程序输出的图片并没有描框。根据…

【小白教学】-- 安装Ubuntu-20.04系统

下载 Ubuntu-20.04 镜像 具体如何下载镜像,请移驾我上一篇文章。使用清华大学开源镜像站下载。https://zhuanlan.zhihu.com/p/706444837 制作 Ubuntu-20.04 系统盘 安装软件 UltralSO 开始制作系统盘 第一步,插入一个 u 盘,启动软件&#x…

PO模式登录测试

项目实践 登陆项目测试 get_driver import page from selenium import webdriverclass GetDriver:driver Noneclassmethoddef get_driver(cls):if cls.driver is None:cls.driver webdriver.Edge()cls.driver.maximize_window()cls.driver.get(page.url)return cls.drivercl…

关于批量采集1688商品主图及链接的方式:软件采集/1688官方API接口数据采集

关于批量采集,我们通常用到的是软件 采集,或者通过1688官方API数据采集的形式:用户输入一组1688商品ID,一行一个,流程会自动逐个打开对应的1688商品详情页,采集主图的所有链接。 结果保存为表格的一行&…

Linux运维之管道符、重定向与环境变量

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、输入输出重定向 二、管道命令符 三、命令行的通配符 四、常用的转义字符 五、重要的环境变量 致谢 一、输入输出重定向 输入重定向是…

【Python+微信小程序】学生考勤签到系统(已开源)

1. 简介 😝 这个项目是一款基于微信小程序和Flask框架开发的应用,旨在帮助学校管理学生的考勤和课程信息。系统通过集成数据库管理、API开发以及前后端交互,实现了便捷的学生考勤记录、课程表管理和教师交互功能。其主要特点包括&#xff1a…

程序化交易广告及其应用

什么是程序化交易广告? 程序化交易广告是以实时竞价技术即RTB(real-time bidding)为核心的广告交易方式。说到这里,你可能会有疑问:像百度搜索关键词广告还有百度网盟的广告,不也是CPC实时竞价的吗&#x…

Python学习笔记22:进阶篇(十一)常见标准库使用之访问互联网功能urllib模块的学习使用,requests库和aiohttp库了解

前言 本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。 根据模块知识,一次讲解单个或者多个模块的内容。 教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html 互联网访…