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

ubuntu 18.04 LTS交叉编译opencv 3.4.16并编译工程[全记录]

一、下载并解压opencv 3.4.16源码

https://opencv.org/releases/
放到home路径下的Exe文件夹(专门放用户安装的软件)中,其中build是后期自建的
为了版本控制,保留了3.4.16,并增加了-gcc-arm
在这里插入图片描述

二、安装cmake和cmake-gui

我用命令安装的,版本不是最新的,但二者的版本是匹配的。

sudo apt install cmake
sudo apt-get install cmake-gui

查看版本
在这里插入图片描述

三、启动cmake-gui并编译opencv 3.4.16

1.启动cmake-gui对话框

sudo cmake-gui

2.在opencv源码路径下新建build文件夹(用于存放编译文件)
3.在/usr/local路径下新建opencv3.4.16-gcc-arm文件夹(用于存放编译结果)
4.对话框设置
参考博文:https://blog.csdn.net/xiaopang_love_study/article/details/121617995#t7
部分设置截图如下:
4.1设置source和build为opencv解压后的路径,之后点击configure
在这里插入图片描述
4.2选择交叉编译器
在这里插入图片描述
4.3设置编译器为gcc-arm,该编译器之前解压到了Exe文件夹中了,并不是命令安装的,但设置了gcc-arm相关的环境变量(百度搜索安装方法即可,编译器的完整名称:gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf)。
(C、C++、Target Root均来自该编译器目录,其他Target Root选择lib文件夹,而不是lib64文件夹)
其他默认。点“Finish”
在这里插入图片描述
在新的对话框中的Search框搜索输入Z和install:
Z:把搜索到的BUILD_ZLIB打勾。
install:把搜索到的安装路径改为/usr/local/opencv3.4.16-gcc-arm
(之前新建了opencv3.4.16-gcc-arm,方便后期移植到arm环境时拷贝lib文件夹)
依次点Configure、Generate。如果红色的行都消失了,说明配置成功。关闭CMake对话框。
在这里插入图片描述

四、编译和安装OpenCV 3.4.16

1.进入opencv源文件夹内的build路径
执行

cd opencv/build    #进入配置好的编译目录
sudo make -j4      #启动4个核一起编译
sudo make install  #拷贝编译结果到/usr/local/opencv3.4.16-gcc-arm目录

若有编译错误,参考原博文https://blog.csdn.net/xiaopang_love_study/article/details/121617995#t7
或其他博文

2.设置环境变量
2.1设置/etc/ld.so.conf.d/opencv.conf

sudo gedit /etc/ld.so.conf.d/opencv.conf

在opencv.conf中添加

/usr/local/opencv3.4.16-gcc-arm/lib

如下图
在这里插入图片描述
加载操作

sudo ldconfig

2.设置/etc/bash.bashrc

sudo gedit /etc/bash.bashrc

添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

更新环境变量

source /etc/bash.bashrc
sudo updatedb

-------------------至此,opencv被gcc-arm编译并安装完成。---------------------------

五、交叉编译opencv 3.4.16工程

1.参考博文:https://blog.csdn.net/xiaopang_love_study/article/details/121617995#t7
编写mergeImg.cpp代码和CMakeLists.txt
mergeImg.cpp

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include <iostream>
#include <stdio.h>using namespace cv;
using namespace std;int main(int argc, char **argv)
{Mat imsrc1 = imread(argv[1]);Mat imsrc2 = imread(argv[2]);Mat imsrc2_scaler;      //将imsrc2缩放到imsrc1的尺寸Mat imdst;              //合成的目标图像double alpha = 0.3;double gamma = 0;if(imsrc1.size() != imsrc2.size()){printf("resize start!\n");resize(imsrc2, imsrc2_scaler, imsrc1.size(), 0, 0, INTER_LINEAR);addWeighted(imsrc1, alpha, imsrc2_scaler, 1 - alpha, gamma, imdst);}else{addWeighted(imsrc1, alpha, imsrc2, 1 - alpha, gamma, imdst);}imwrite("imdst.jpg", imdst);return 0;
}

CMakeLists.txt

cmake_minimum_required (VERSION 3.5.1)PROJECT (mergeImg)set(OpenCV_DIR /usr/local/opencv3.4.16-gcc-arm/lib)
include_directories(/usr/local/opencv3.4.16-gcc-arm/include)
find_package(OpenCV REQUIRED)add_executable (mergeImg "mergeImg.cpp")
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} -lpthread -ldl)

2.利用cmake-gui编译mergeImg工程,生成makefile等文件
流程与上述编译opencv类似,其中:
(1)code和binaries均为mergeImg工程路径(build是新建的,用于存储编译文件)
(2)CAMKE_FIND_ROOT_PATH默认为gcc-arm的lib文件夹/home/lyc/Exe/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/lib (之前在home文件夹内安装的)
(3)OpenCV_DIR默认为/usr/local/opencv3.4.16-gcc-arm/share/OpenCV(注意:之前我将opencv安装在了home文件夹,但cmake-gui中的OpenCV_DIR默认是/usr/local,尝试了多种方法仍无法修改,configure后仍为/usr/local,最后选择将opencv安装在/usr/local,避免了修改cmake-gui中的OpenCV_DIR)
(4)依次点击configure、generate
在这里插入图片描述
该过程在build文件夹中生成的文件如下(有些可能是make命令生成的,记不清了):
在这里插入图片描述
3.make命令行编译mergeImg工程
在命令窗口中,进入build文件夹,执行:

sudo make -j4

即可得到执行文件mergeImg
在这里插入图片描述
因交叉编译,执行文件只能在arm平台上运行,需要查看可执行文件是否符合arm框架
参考博文:https://blog.csdn.net/qq_44681788/article/details/130901649

file mergeImg

在这里插入图片描述
或者

readelf -h mergeImg

在这里插入图片描述
可以看出,执行文件符合ARM架构。

至此,交叉编译完毕。

六、移植编译结果
将执行文件mergeImg,两张图像angle.jpg和plane.jpg放到opencv_test_V2文件夹中,与opencv编译结果opencv3.4.16-gcc-arm文件夹(在上述/usr/local/中)一起移植:
(1)opencv_test_V2放到arm环境的用户目录下
在这里插入图片描述
(2)opencv3.4.16-gcc-arm文件夹放到arm环境/usr/local/下
在这里插入图片描述
在arm环境中,进入opencv_test_V2,执行命令:

./mergeImg plane.jpg angle.jpg

执行文件将两张图像angle.jpg和plane.jpg进行了融合,得到运行结果imdst.jpg
在这里插入图片描述至此,移植完毕!

相关文章:

ubuntu 18.04 LTS交叉编译opencv 3.4.16并编译工程[全记录]

一、下载并解压opencv 3.4.16源码 https://opencv.org/releases/ 放到home路径下的Exe文件夹&#xff08;专门放用户安装的软件&#xff09;中&#xff0c;其中build是后期自建的 为了版本控制&#xff0c;保留了3.4.16&#xff0c;并增加了-gcc-arm 二、安装cmake和cmake-g…...

禁用和开启笔记本电脑的键盘功能,最快的方式

笔记本键盘通常较小&#xff0c;按键很不方便&#xff0c;当我们外接了键盘时就不需要再使用自带的键盘了&#xff0c;而且午睡的时候&#xff0c;总是担心碰到笔记本的键盘&#xff0c;可能会删掉我们的代码什么的&#xff0c;所以就想着怎么禁用掉&#xff0c;下面是操作步骤…...

【单片机基础】使用51单片机制作函数信号发生器(DAC0832使用仿真)

文章目录 &#xff08;1&#xff09;DA转换&#xff08;2&#xff09;DAC0832简介&#xff08;3&#xff09;电路设计&#xff08;4&#xff09;参考例程&#xff08;5&#xff09;参考文献 &#xff08;1&#xff09;DA转换 单片机作为一个数字电路系统&#xff0c;当需要采集…...

springcloud组件

https://www.bilibili.com/video/BV1QX4y1t7v5?p32&vd_source297c866c71fa77b161812ad631ea2c25 eureka : 主要是收集服务的注册信息。 如果有了eureka启动了。内部之前的调用其实就可以用服务名了&#xff0c; 本来是要是用ip端口来访问的&#xff0c;只要eureka启来了…...

手机爬虫用Appium详细教程:利用Python控制移动App进行自动化抓取数据

Appium是一个强大的跨平台工具&#xff0c;它可以让你使用Python来控制移动App进行自动化操作&#xff0c;从而实现数据的抓取和处理。今天&#xff0c;我将与大家分享一份关于使用Appium进行手机爬虫的详细教程&#xff0c;让我们一起来探索Appium的功能和操作&#xff0c;为手…...

deb包构建详解

deb包构建详解 一、deb包构建流程二、deb包构建描述文件详解2.1 control文件2.2 postinst 文件 (post-installation script)2.3 postrm 文件 (post-removal script)2.4 prerm 文件 (pre-removal script)2.5 preinst 文件 (pre-installation script)2.6 rules 文件2.7 changelog…...

【Spring Cloud】网关Gateway的请求过滤工厂RequestRateLimiterGatewayFilterFactory

概念 关于微服务网关Gateway中有几十种过滤工厂&#xff0c;这一篇博文记录的是关于请求限流过滤工厂&#xff0c;也就是标题中的RequestRateLimiterGatewayFilterFactory。这个路由过滤工厂是用来判断当前请求是否应该被处理&#xff0c;如果不会被处理就会返回HTTP状态码为42…...

自己写spring boot starter问题总结

1. Unable to find main class 创建spring boot项目写自己的starterxi写完之后使用install出现Unable to find main class&#xff0c;这是因为spring boot打包需要一个启动类&#xff0c;按照以下写法就没事 <plugins><plugin><groupId>org.springframewo…...

vue3如何打开页面即向后端发送请求

目录 背景&#xff1a; 实现&#xff1a; 1、使用 2、案例 补充&#xff1a; 1、如何定义一个集合来接受后端返回的list 2、加入请求头 背景&#xff1a; 如果想在页面刚加载时向后端发送请求&#xff0c;可以使用Vue 3的生命周期钩子函数onMounted来实现 实现&#xff…...

【软考】9.2 串/数组/矩阵/广义表/树

《字符串》 一种特殊的线性表&#xff0c;数据元素都为字符模式匹配&#xff1a;寻找子串第一次在主串出现的位置 模式匹配算法 1. 暴力破解法&#xff08;布鲁特-福斯算法&#xff09; 主串与子串一个个匹配效率低 2. KMP算法 主串后缀和子串前缀能否找到一样的元素&#xf…...

大数据 DataX 数据同步数据分析入门

目录 一、DataX 概览 1.1 DataX 是什么 1.2 DataX 3.0 概览 设计理念 当前使用现状 二、DataX 详解 2.1 DataX 3.0 框架设计 2.2 DataX 3.0 插件体系 2.3 DataX 3.0 核心架构 2.3.1 核心模块介绍 2.3.2 DataX 调度流程 2.4 DataX 3.0 的六大核心优势 2.4.1 可靠的…...

【京东开源项目】微前端框架MicroApp 1.0正式发布

介绍 MicroApp是由京东前端团队推出的一款微前端框架&#xff0c;它从组件化的思维&#xff0c;基于类WebComponent进行微前端的渲染&#xff0c;旨在降低上手难度、提升工作效率。MicroApp无关技术栈&#xff0c;也不和业务绑定&#xff0c;可以用于任何前端框架。 源码地址…...

多个子div在父中垂直居中

在一个div下&#xff0c;有多个子div&#xff0c;且子div都是水平垂直居中 <template><div><div class"far"><!-- 注意需要多包裹一层 --><div><div class"son1">1</div><div class"son2">222…...

[C国演义] 第十五章

第十五章 最长湍流子数组环绕字符串中唯⼀的⼦字符串 最长湍流子数组 力扣链接 子数组 ⇒ dp[i]的含义: 以arr[i] 结尾的所有子数组中的最长湍流子数组的长度 子数组 ⇒ 状态转移方程根据 最后一个位置来划分&#x1f447;&#x1f447;&#x1f447; 初始化: 都初始化为…...

Docker Compose和Consul

目录 Docker-compose Docker-compose 简介 YAML 文件格式及编写注意事项 Docker Compose配置常用字段 Docker Compose 常用命令 Docker Compose 文件结构 compose 部署 Docker Compose 环境安装 准备依赖文件 编写配置文件docker-compose.yml Consul consul 部署 c…...

Wireshark新手小白基础使用方法

一、针对IP抓取 1、过滤格式&#xff1a; &#xff08;1&#xff09;、ip.src eq x.x.x.x &#xff08;2&#xff09;、ip.dst eq x.x.x.x &#xff08;3&#xff09;ip.src eq x.x.x.x or ip.dst eq x.x.x.x 二、针对端口过滤 1、过滤格式&#xff1a; &#xff08;1&a…...

互动设计:深入了解用户体验的关键

交互是人与计算机系统之间的互动过程。在计算机领域中&#xff0c;交互是人机交互技术的核心内容之一。交互设计是一种基于人类行为科学、心理学、人体工程学等领域的专业设计&#xff0c;目的是创造用户友好的、易于使用的计算机软件、网络、移动应用等。交互的本质在于用户的…...

maven的坐标元素

maven的坐标&#xff1a;使用三个向量在Maven仓库中唯一的定位到一个jar包 * groupId&#xff1a;公司或组织的ID * artifactId&#xff1a;一个项目或者是项目中的一个模块的ID * version&#xff1a;版本号 <groupId>com.gz.maven</groupId> <artifactId&…...

蓝桥杯 题库 简单 每日十题 day13

01 乘积尾零 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将 所填结果输出即可。如下的10行数据&#xff0c;每行有10个整数&#xff0c;请你求出它们的乘积的末尾有多少个零&#xff1f; 5650 4542 3554 473 946 4114 3871 9073 90 …...

联想G50笔记本直接使用F键功能(F1~F12)需要在BIOS设置关闭热键功能可以这样操作!

如果开启启用热键模式按F1就会出现FnF1的效果&#xff0c;不喜欢此方式按键的用户可以进入BIOS设置界面停用热键模式即可。 停用热键模式方法如下&#xff1a; 1、重新启动笔记本电脑&#xff0c;当笔记本电脑屏幕出现Lenovo标识的时候&#xff0c;立即按FnF2进入BIOS设置界面…...

C++入门(头文件,命名空间,作用域,输入输出流,引用,缺省参数,函数重载)

目录 一&#xff0c;头文件 二,命名空间 三&#xff0c;作用域 四&#xff0c;输入输出流 五&#xff1a;引用 六&#xff0c;缺省参数 七&#xff0c;函数重载 一&#xff0c;头文件 C的头文件与C是有差距的&#xff0c;C的头文件是#include<stdio.h>,而C是#inc…...

“Linux免除系统交互操作方法、expect自动化交互工具” 及 “SSH批量修改主机密码脚本”

一、Linux系统免除交互操作方法 1、EOF多文本输入 案例&#xff1a;为机器磁盘进行分区并实现挂载&#xff0c;免交互式操作&#xff0c;如何实现&#xff1f; #!/bin/bash fdisk /dev/sdb <<EOF n p 1 wq EOFmkfs.xfs /dev/sdb1 && mkdir -p /data &&am…...

三相异步电机动态数学模型及矢量控制仿真

三相异步电机动态数学模型及矢量控制仿真 本文带你一步步推倒三相异步电机动态数学模型&#xff0c;按基于转子磁链定向的矢量控制进行 matlab 仿真&#xff0c;实现较好的控制效果。 1、异步电机三相方程 2、坐标变换 3、磁链3/2变换推导 4、两相静止坐标系下的方程 5、…...

HTML5 新增表单标签

HTML5为表单添加了一些新的语义化标签&#xff0c;可以更好地描述表单内容和功能。下面是新增的表单标签及其功能&#xff1a; <datalist>标签&#xff1a;用于定义一个选项列表&#xff0c;供用户选择或输入。 <output>标签&#xff1a;用于显示表单提交后的结果…...

【版本控制】Git(学习笔记)

一、Git工作流程图 clone&#xff08;克隆&#xff09;: 从远程仓库中克隆代码到本地仓库checkout &#xff08;检出&#xff09;&#xff1a;从本地仓库中检出一个仓库分支然后进行修订add&#xff08;添加&#xff09;: 在提交前先将代码提交到暂存区commit&#xff08;提交&…...

C语言,求一个整数的全部素数因子

#include <stdio.h> int prime(int x)//一旦x被2到x-1的数整除&#xff0c;就返回0&#xff0c;一直不被整除&#xff0c;才返回1。 {int j 0;for (j 2; j < x; j){if (x % j 0){return 0;}}return 1; } int main() {int n 0;scanf("%d", &n);int i…...

Jenkins更换主目录

Jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改&#xff1a; 使用你Web容器的管理工具设置JENKINS_HOME环境参数.在启动Web容器之前设置JENKINS_HOME环境变量.(不推荐)更改Jenkins.war(或者在展开的Web容器)内的web.xml配置文件. 这个值在Jenkins运行时…...

迅为RK3588开发板使用RKNN-Toolkit-lite2运行测试程序

1 首先也需要部署运行环境&#xff0c;将库文件放入 RK3588 开发板上&#xff0c;我们将网盘资料“iTOP-3588 开发 板 \02_ 【 iTOP-RK3588 开 发 板 】 开 发 资 料 \12_NPU 使 用 配 套 资 料 \05_Linux_librknn_api\librknn_api\aarch64”路径下的文件通过U盘拷贝到开发板的…...

1990-2023:RPA的变革之路

01 第一阶段&#xff1a;初级助手与UI测试 阶段简介&#xff1a; RPA开始于简单的数据导入和用户界面测试 在最早期的阶段中&#xff0c;RPA又可比作虚拟化助手&#xff0c;能够助力人力实施的基本数据导入&#xff0c;然而辅助作业时尚需人为操作。RPA 的故事始于用户界面 (U…...

SQL 语法

SQL 语法规则 SQL语句总是以关键字开始&#xff0c;如SELECT、INSERT、UPDATE、DELETE、DROP、CREATE。SQL语句以分号结尾。SQL不区分大小写&#xff0c;意味着update与UPDATE相同。 数据库表 数据库通常包含一个或多个表。每个表都用一个名称标识&#xff08;例如&#xff0c;…...

网站内页做排名/自动点击器软件

摘要自簡單來說就是可以將一個 or 多個應用包裝成一個服務&#xff0c;並透過 chart 的形式發佈&#xff0c;讓大家可以方便在 k8s 上安裝特定的服務。幾個元件的名詞Tiller server: 用來與API server溝通&#xff0c;使用chart在k8s cluster上建立服務Helm client: 則是用來操…...

江苏连云港网站建设公司/牡丹江seo

会有如题的思考&#xff0c;是因为我一直有一个疑问java文件的编码会影响字符串的编码嘛&#xff1f; 因此自然而然就想到了java编译后的文件的编码。 1 javac在控制台编译java类文件 手动建立一个java文件Demo.java&#xff0c;并保存。 此时Demo.java文件的编码为ANSI,中…...

重庆本地建站/郑州seo外包阿亮

1.首先你要有一个github账号,如果没有的话,登录网址注册&#xff1a;https://github.com/ 2.进入你的github 点击右上角的号 选择 New repository 3.取一个Repository name&#xff0c;不能和自己的其他项目冲突 PS&#xff1a;Repository name: 仓库名称Description(可选…...

南京设计公司前十名/深圳优化怎么做搜索

大家好&#xff0c;9月14日&#xff08;周五&#xff09;【免费送书】说说哪本书曾经让你爱不释手活动中获奖名单如下&#xff0c;排名1—10的留言读者免费赠送图书一本&#xff0c;图书从活动里的书单中任选&#xff0c;由电子工业出版社博文视点提供&#xff1b;排名11—20的…...

有做兼职赚钱的网站吗/网站seo视频狼雨seo教程

一、引言 现在已经是十月份的月末了&#xff0c;金九银十&#xff0c;这个找工作和面试的热潮已经渐渐退隐。 潮涨潮退&#xff0c;有的人从里面收获了心仪的offer&#xff1b;有的人走了一趟&#xff0c;一无所获&#xff0c;或者收获寥寥&#xff0c;无甚满意&#xff1b;还…...

个人作品集网站模板免费下载/荨麻疹怎么治疗能除根

https://blog.csdn.net/github_37512301/article/details/75675054 一、关联模型在关系型数据库中&#xff0c;表之间有一对一、一对多、多对多的关系。在 TP5 中&#xff0c;实现了ORM (Object Relational Mapping) 的思想&#xff0c;通过在模型中建立模型间的关联&#xff0…...