Linux交叉编译opencv并移植ARM端

news2024/11/24 0:39:09

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.coloradmin.cn/o/882438.html

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

相关文章

微服务与Nacos概述-6

RBAC 模型 RBAC 基于角色的访问控制是实施面向企业安全策略的一种有效的访问控制方式。 基本思想是&#xff0c;对系统操作的各种权限不是直接授予具体的用户&#xff0c;而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当…

使用 BERT 进行文本分类 (02/3)

​ 一、说明 在使用BERT&#xff08;1&#xff09;进行文本分类中&#xff0c;我向您展示了一个BERT如何标记文本的示例。在下面的文章中&#xff0c;让我们更深入地研究是否可以使用 BERT 来预测文本是使用 PyTorch 传达积极还是消极的情绪。首先&#xff0c;我们需要准备数据…

利用POM完成脚本分离实现企业级自动化(POM设计模式+页面的框架封装+测试报告截图)

利用POM完成脚本分离实现企业级自动化&#xff08;POM设计模式页面的框架封装测试报告截图&#xff09; 项目-测试-手工测试 项目-测试-手工测试 1.了解需求&#xff1b; 2.编写测试用例&#xff08;开始&#xff09;——功能测试组会去做的事情 3.执行测试用例——发送测试报…

vue中router路由的原理?两种路由模式如何实现?(vue2) -(下)

上一期我们说到了如果想要实现一个路由嵌套&#xff0c;那么就需要判断传递实例化路由时的那个路由信息是否存在children属性&#xff0c;如果有children说明它是二级路由&#xff0c;我们还需要去递归判断&#xff0c;因为它不一定只有一个子路由&#xff0c;接下来实现一下路…

【第三阶段】kotlin语言的substring

const val INFO"kotlin java" fun main() {val indexOfINFO.indexOf(j)//左包右不包//0,indexOf等价于0 until indexOf ktolin常用0 until indexOf 方式println(INFO.substring(0,indexOf))println(INFO.substring(0 until indexOf))}执行结果

Android Framework 动态更新插拔设备节点执行权限

TF卡设备节点是插上之后动态添加&#xff0c;所以不能通过初始化设备节点权限来解决&#xff0c;需要监听TF插入事件&#xff0c;在init.rc 监听插入后动态更新设备节点执行权限 添加插拔TF卡监听 frameworks/base/services/core/java/com/android/server/StorageManagerServic…

YOLOv5基础知识入门(6)— 激活函数(Mish、Sigmoid、Tanh、ReLU、Softmax、SiLU等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。激活函数&#xff08;Activation functions&#xff09;对于人工神经网络模型去学习、理解非常复杂和非线性的函数具有十分重要的作用。YOLOv5模型训练过程中即使用了激活函数&#xff0c;可以改善模型的训练速度和准确性。…

SpringCloud实用篇7——深入elasticsearch

目录 1 数据聚合1.1 聚合的种类1.2 DSL实现聚合1.2.1 Bucket聚合语法1.2.2 聚合结果排序1.2.3 限定聚合范围1.2.4 Metric聚合语法1.2.5.小结 1.3 RestAPI实现聚合1.3.1 API语法1.3.2 业务需求1.3.3 业务实现 2 自动补全2.1 拼音分词器2.2 自定义分词器2.3 自动补全查询2.4 实现…

vue3-router

一、路由 &#xff08;1&#xff09;通过 URL 区分路由的机制上&#xff0c;有两种实现方式&#xff1a; hash 模式&#xff1a;通过 URL 中 # 后面的内容做区分&#xff0c;我们称之为 hash-router&#xff1b; history 模式&#xff1a;在这种方式下&#xff0c;路由看起来和…

C++_模板进阶_非类型模板参数_模板特化_分离编译

一、非类型模板参数 模板参数&#xff0c;分为类型形参和非类型形参。 类型形参就是在模板中跟在typename和class之后的参数类型名称&#xff0c;非类型形参就是用一个常量作为类模板或者函数模板的一个参数&#xff0c;在类模板和函数模板中&#xff0c;可以将该参数当作常量…

第三方软件安全测评如何收费,安全测试包括哪些测试项?

近年来&#xff0c;随着全球范围内网络安全事件的频发&#xff0c;第三方软件安全测评的需求也日益增长。软件安全对于企业的重要性不言而喻&#xff0c;那么如何收费和可做测试项就成了企业最为关注的问题&#xff0c;小编将就以上问题作出以下简析。 一、第三方软件安全测评…

Smartbi 修改用户密码漏洞

漏洞简介 通过查看 Smartbi 的补丁包信息&#xff0c;发现存在漏洞在某种特定情况下修改用户的密码&#xff0c;进行简单的复现和分析 ​ 漏洞复现 在页面上修改密码时&#xff0c;需要知道原本的用户对应的密码 ​ ​ 直接构造这样的数据包&#xff0c;就不需要知道原本…

Excelize Go语言操作 Office Excel文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

硬件-10-浏览器发展史和开源操作系统FydeOS

吊打 IE、Firefox&#xff0c;谷歌 Chrome 十年发展史 fydeos官方网站 全面了解浏览器内核发展史 1 浏览器内核 浏览器内核英文叫做&#xff1a;Rendering Engine&#xff0c;中文翻译很多&#xff0c;排版引擎、解释引擎、渲染引擎&#xff0c;现在流行称为浏览器内核。内核…

42、可靠传输——连续ARQ

上回内容我们学习到&#xff0c;一种保证可靠传输的机制——ARQ协议&#xff0c;ARQ协议通过设置超时定时器&#xff0c;当在规定时间内没有收到来自对方发来的“确认”报文&#xff0c;就自动报文重传。这其中&#xff0c;ARQ协议和停止等待机制的结合&#xff0c;我们把它称作…

USB PD快充保护方案有哪些?用集成式TVS还是分立式TVS?

USB Power Delivery &#xff0c;简称USB PD&#xff0c;是由USB-IF组织制定的一种快速充电规范&#xff0c;目前主流的快充协议之一。该规范可实现更高的电压和电流&#xff0c;输送的功率最高可达100瓦&#xff0c;并可以自由的改变电力的输送方向。在日常使用USB PD快充充电…

CNN卷积详解(三)

一、卷积层的计算 4 ∗ * ∗ 4的输入矩阵 I I I 和 3 ∗ * ∗ 3 的卷积核 K K K: 在步长&#xff08;stride&#xff09;为 1 时&#xff0c;输出的大小为 ( 4 − 3 1 ) ( 4 − 3 1) 计算公式&#xff1a; ● 输入图片矩阵 I I I 大小&#xff1a; w w w w ww ●…

【八大排序】-- 基数排序(动图演示)

基数排序(桶排序)介绍 &#xff08;1&#xff09;基数排序&#xff08;radix sort&#xff09;属于“分配式排序”&#xff08;distribution sort&#xff09;&#xff0c;又称“桶子法”&#xff08;bucket sort&#xff09;或bin sort&#xff0c;顾名思义&#xff0c;它是通…

【环境配置】Windows10-YOLOv8运行报错

问题如下&#xff1a; Windows10 运行 YOLOv8 出现如下错误&#xff1a; Traceback (most recent call last): File “”, line 1, in File “D:\anaconda3\envs\yolov8\Lib\multiprocessing\spawn.py”, line 116, in spawn_main exitcode _main(fd, parent_sentinel) ^^^^^…

【ROS】话题通信--从理论介绍到模型实现

1.简单介绍 话题通信是ROS中使用频率最高的一种通信模式&#xff0c;话题通信是基于发布订阅模式的&#xff0c;也即:一个节点发布消息&#xff0c;另一个节点订阅该消息。像雷达、摄像头、GPS… 等等一些传感器数据的采集&#xff0c;也都是使用了话题通信&#xff0c;换言之…