Linux交叉编译opencv并移植ARM端

Linux交叉编译opencv并移植ARM端 - 知乎

一、安装交叉编译器

目标平台为arm7l,此为32位ARM架构,要安装合适的编译器

sudo apt install arm-linux-gnueabihf-gcc
sudo apt install arm-linux-gnueabihf-g++

注意:64位ARM架构的编译器与32位ARM架构的编译器不能通用

二、opencv交叉编译

opencv的交叉编译工具链在../opencv3.2.0/platforms/linux 路径下,linux文件夹下是一些.cmake文件,对应不同的移植对象,我需要在rv1126上部署模型,所以选择platform/linux/arm-gnueabi.toolchain.cmake

你也可以对其作出修改(添加编译器所在位置):

set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(GNU_MACHINE "arm-linux-gnueabi" CACHE STRING "GNU compiler triple")set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++)include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")

接下来执行交叉编译命令

mkdir build && cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/mnt/usr/local -D OPENCV_EXTRA_MODULES_PATH=/opt/opencv/opencv_contrib/modules/ -D OPENCV_ENABLE_NONFREE=True -DCMAKE_TOOLCHAIN_FILE=/opt/opencv/platforms/linux/arm-gnueabi.toolchain.cmake ..sudo make -j8
sudo make install
gnueabi.toolchain.cmake没有修改,也能找到编译器位置

编译结束后进入 build 文件夹,里面生成bin,include,lib,share四个文件夹

三、Linux上生成ARM架构下可执行文件

创建测试用例test.cpp,内容如下

#include <opencv2/opencv.hpp>using namespace cv; int main( int argc, char** argv )  
{  Mat image;  image = imread( "7.bmp", 1 );  if( !image.data )  {  printf( "No image data \n" );  return -1;  }   cv::Point lu = cv::Point(180, 60); cv::Point rd = cv::Point(400, 260);   cv::rectangle(image, lu, rd, cv::Scalar( 255, 20, 0 ), 1, cv::LINE_AA );                 	imwrite("8.bmp", image);        return 0;  
}

CMakeList.txt

cmake_minimum_required(VERSION 2.8.4)project(draw_image)
include ($ENV{HOME}/configs/cross.cmake)find_package(OpenCV REQUIRED)
add_executable(${CMAKE_PROJECT_NAME} test.cpp)
target_include_directories(draw_image PUBLIC ${OpenCV_INCLUDE_DIRS})
target_link_libraries(draw_image PRIVATE ${OpenCV_LIBS})
~                                                        

在终端执行:
 

mkdir build && cd buid
cmake ..
make

在test.cpp同一目录下会生成可执行文件 draw_image,利用file draw_image检查可执行文件格式是否支持arm

draw_image: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=6030f6191b409626a1f54c996cebb91aad644061, for GNU/Linux 3.2.0, not stripped

出现如上结果说明可执行文件支持ARM7l

四、移植ARM端执行

将 build文件夹里面的include和lib里的文件分别拷贝到ARM板的/usr/include 和/usr/lib下 然后打开终端执行可执行文件即可。

build文件里include也许是空的,你可以在安装目录/include/找到opencv的头文件

draw_image可以执行

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MyBatis】查询数据库

目录 一、什么是MyBatis 二、MyBatis框架的搭建 1、搭建MyBatis框架 2、设置MyBaits项目的配置 三、使用MyBatis完成数据库的操作 1、MyBatis程序中sql语句的即时执行和预编译 1.1、即时执行&#xff08;${}&#xff09; 1.2、预编译&#xff08;#{}&#xff09; 1.3、即…

tomcat设置PermSize

最近tomcat老是报错,查看了日志出现PermGen 内存不够用,重启tomcat后查询使用情况 通过启动参数发现没有设置 PermGen,继续通过jmap查看 jmap -heap 21179 发现99%已使用,而且默认是30.5M,太小了,这里设置成256M 1. 创建setenv.sh文件 在/usr/local/tomcat/bin目录下创建一个…

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写

解锁编程的新契机&#xff1a;深入探讨Kotlin Symbol Processor (KSP)的编写 1. 引言 随着软件开发领域的不断发展&#xff0c;新的工具和技术不断涌现&#xff0c;以满足开发者在构建高效、可维护和创新性的代码方面的需求。Kotlin Symbol Processor&#xff08;KSP&#xf…

从零开始,快速打造租车服务小程序的分享

随着移动互联网的发展&#xff0c;小程序成为了企业推广和服务的重要手段之一。租车服务行业也不例外&#xff0c;通过打造一款租车服务小程序&#xff0c;企业可以更好地与用户进行互动和交流&#xff0c;提供更方便快捷的租车服务。本文将介绍如何利用第三方制作平台/工具快速…

PHP实现在线年龄计算器

1. 输入日期查询年龄 2. php laravel框架实现 代码 /*** 在线年龄计算器*/public function ageDateCal(){// 输入的生日时间$birthday $this->request(birthday);// 当前时间$currentDate date(Y-m-d);// 计算周岁$age date_diff(date_create($birthday), date_create($…

Eleastisearch5.2.2利用镜像迁移构建实例后ES非健康状态

正常迁移完成后启动服务&#xff0c;查看ES非健康状态 此时观察ES集群状态&#xff1a;curl -XGET -u elastic:xxx localhost:9200/_cluster/health?pretty 注意到"active_shards_percent_as_number" : 88.8888 该项的值不产生变化;集群状态"status" : “…

8-1 统计字符

本题要求编写程序&#xff0c;输入10个字符&#xff0c;统计其中英文字母、空格或回车、数字字符和其他字符的个数。 输入格式: 输入为10个字符。最后一个回车表示输入结束&#xff0c;不算在内。 输出格式: 在一行内按照 letter 英文字母个数, blank 空格或回车个数, d…

升级指定版本Node.js或npm

一. 下载指定node.js版本Node.js 二. 升级node.js版本 打开电脑cmd 输入 npm install node18.17.1 -g 三. 升级npm版本 打开电脑cmd 输入 npm install npm8.1.2 -g

SQL注入之Oracle注入

SQL注入之Oracle注入 7.1 SQL注入之Oracle环境搭建 前言 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统…

在WordPress站点中展示阅读量等流量分析数据(超详细实现)

这篇文章也可以在我的博客中查看 关于本文 专业的流量统计系统能够相对真实地反应网站的访问情况。 这些数据可以在后台很好地进行分析统计&#xff0c;但有时我们希望在网站前端展示一些数据 最常见的情景就是&#xff1a;展示页面的浏览量 这简单的操作当然也可以通过简单…

(el-Form)操作(不使用 ts):Element-plus 中 Form 表单组件校验规则等的使用

Ⅰ、Element-plus 提供的 Form 表单组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 Form 表单组件情况&#xff1a; 其一、Element-plus 自提供的 Form 代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环…

6.3 社会工程学攻击

数据参考&#xff1a;CISP官方 目录 社会工程学攻击概念社会工程学攻击利用的人性 “弱点”典型社会工程学攻击方式社会工程学攻击防护 一、社会工程学攻击概念 什么是社会工程学攻击 也被称为 "社交工程学" 攻击利用人性弱点 (本能反应、贪婪、易于信任等) 进…

萤石直播以及回放的接入和销毁

以下基于vue项目 1.安装 npm i ezuikit-js 2、导入 main.js中 import EZUIKit from "ezuikit-js"; //导入萤石Vue.use(EZUIKit); 3、创建容器 <div class"video"><div id"video-container"></div><!-- <iframe :src…

栈存储结构详解

目录 栈存储结构详解 进栈和出栈 栈的具体实现 栈的应用 什么是队列&#xff08;队列存储结构&#xff09; 栈存储结构详解 同顺序表和链表一样&#xff0c;栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构&#xff0c;如图 1 所示。 图 1 栈存储结构示意…

HTML5的介绍和基本框架

目录 HTML5 HTML5介绍 HTML5的DOCTYPE声明 HTML5基本骨架 html标签 head标签 body标签 title标签 meta标签 在vscode中写出第一个小框架 HTML5 HTML5介绍 HTML5是用来描述网页的一种语言&#xff0c;被称为超文本标记语言。用HTML5编写的文件&#xff0c;后缀以.ht…

设备加密狗

场景描述 随着科技的飞速发展&#xff0c;越来越多的智能设备走进生产加工车间。例如智能雕刻机、钣金机、 榫槽机、钻孔机、磨刀机等等。 目前市场的智能设备具有一个共同的特点&#xff0c;内置嵌入操作系统&#xff0c;如windows或者linux系统。设备制造商提供智能设备出…

20天学会rust(四)常见系统库的使用

前面已经学习了rust的基础知识&#xff0c;今天我们来学习rust强大的系统库&#xff0c;从此coding事半功倍。 集合 数组&可变长数组 在 Rust 中&#xff0c;有两种主要的数组类型&#xff1a;固定长度数组&#xff08;Fixed-size Arrays&#xff09;和可变长度数组&…

Ajax如何理解

什么是ajax ●认识前后端交互 ○就是 前端 与 后端的 一种通讯方式 ○主要使用的技术栈就是 ajax (async javascript and xml) ●ajax 特点 ○使用 ajax 技术网页应用能够快速的将新内容呈现在用户界面 ○并且不需要刷新整个页面, 也就是能够让页面有 "无…

Java技术整理(5)—— Spring篇

Spring是一个全面的全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 1、Spring的核心组件 &#xff08;1&#xff09;数据层&#xff1a; JDBC、ORM、OXM、JMS、Transations &#xff08;2&#x…

Flutter 中,ListView 中需要放置 ListView 需要怎么处理才高效?

问题及场景 ListView 是 Flutter 开发者第一个学习到的 Widget&#xff0c;因为它可以滑动。一切都会运行得很好&#xff0c;直到 ListView 中的 Item 本身也是一个 ListView。你可能会看到 Flutter 建议你将内部的 ListView 的ShrinkWrap 属性设置为 True。虽然错误消除了&am…