交叉编译 opencv-4.10

编译说明

opencv 下包含很多模块,各个模块的作用可以参考Opencv—模块概览. 嵌入式考虑有限存储等因素会对模块进行裁剪,我这里主要保留图像拼接(stitching)图片编解码(imgcodecs)与特征点匹配(feature2d)及其依赖模块,下面是编译过程。

编译过程

  1. 在 github下载opencv库.
  2. 配置交叉编译工具,我这里是 hi3159dv500 的交叉编译工具链,大家根据自己的进行cmake配置。
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)# 环境库
set(CMAKE_FIND_ROOT_PATH /home/hisi/workspace/hocker/pack/3ds/buildroot/output/hisi_3519/host/aarch64-buildroot-linux-gnu/sysroot)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_SYSROOT ${CMAKE_FIND_ROOT_PATH})# 安装路径配置,这个他们需要绝对路径
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/lib-aarch64" CACHE PATH "Installation Directory")  set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
# set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_PATH FALS)set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_FIND_ROOT_PATH})
set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_FIND_ROOT_PATH}/usr/lib/pkgconfig)
set(ENV{PKG_CONFIG_PATH} "")set(TARGET_ARCH arm64)
cd build
# rm ../build/* -rf 
# 这里的命令一定要加 TARGET_ARCH=arm64, 不然 编译 png 的时候 不支持 neno, 导致 imgcodecs 编译失败
cmake .. \-DBUILD_LIST=core,imgproc,features2d,stitching,calib3d,flann,imgcodecs \-DBUILD_opencv_dnn=OFF \-DBUILD_opencv_highgui=OFF \-DBUILD_opencv_videoio=OFF \-DBUILD_opencv_calib3d=ON \-DWITH_PYTHON=OFF \-DWITH_opencv_stitching=ON \-DBUILD_opencv_world=OFF \-DBUILD_TESTS=OFF \-DBUILD_EXAMPLES=OFF \-DWITH_GTK=OFF \-DWITH_JPEG=ON \-DWITH_PNG=ON \-DTARGET_ARCH=arm64 \-DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake
make -j8

编译结果

  1. 编译过程输出(这里主要看库编译过程,仅供参考)
-- Build files have been written to: /home/hisi/workspace/hocker/3ds/opencv-4.10.0/build
Consolidate compiler generated dependencies of target libopenjp2
Consolidate compiler generated dependencies of target jpeg16-static
Consolidate compiler generated dependencies of target zlib
[  0%] Built target opencv_dnn_plugins
Consolidate compiler generated dependencies of target jpeg12-static
[  0%] Built target opencv_highgui_plugins
[  0%] Built target opencv_videoio_plugins
Consolidate compiler generated dependencies of target libwebp
[  3%] Built target zlib
[  7%] Built target libopenjp2
[ 10%] Built target jpeg16-static
Scanning dependencies of target libpng
Consolidate compiler generated dependencies of target libpng
Consolidate compiler generated dependencies of target libtiff
[ 15%] Built target jpeg12-static
[ 18%] Built target libpng
Consolidate compiler generated dependencies of target libjpeg-turbo
[ 26%] Built target libtiff
Consolidate compiler generated dependencies of target opencv_core
[ 45%] Built target libwebp
[ 54%] Built target libjpeg-turbo
[ 69%] Built target opencv_core
Consolidate compiler generated dependencies of target opencv_version
Consolidate compiler generated dependencies of target opencv_flann
[ 69%] Built target opencv_version
[ 70%] Built target opencv_flann
Consolidate compiler generated dependencies of target opencv_imgproc
[ 82%] Built target opencv_imgproc
Consolidate compiler generated dependencies of target opencv_imgcodecs
Consolidate compiler generated dependencies of target opencv_features2d
[ 90%] Built target opencv_imgcodecs
[ 90%] Built target opencv_features2d
Consolidate compiler generated dependencies of target opencv_calib3d
[ 97%] Built target opencv_calib3d
Consolidate compiler generated dependencies of target opencv_stitching
[100%] Built target opencv_stitching
  1. 编译出来的库文件如下
$ ls ../build/lib/ 
libopencv_calib3d.so         libopencv_features2d.so.410     libopencv_imgcodecs.so.4.10.0
libopencv_calib3d.so.410     libopencv_features2d.so.4.10.0  libopencv_imgproc.so
libopencv_calib3d.so.4.10.0  libopencv_flann.so              libopencv_imgproc.so.410
libopencv_core.so            libopencv_flann.so.410          libopencv_imgproc.so.4.10.0
libopencv_core.so.410        libopencv_flann.so.4.10.0       libopencv_stitching.so
libopencv_core.so.4.10.0     libopencv_imgcodecs.so          libopencv_stitching.so.410
libopencv_features2d.so      libopencv_imgcodecs.so.410      libopencv_stitching.so.4.10.0
  1. 编译出来的库大小
$ du --max-depth=0 -h ../build/lib/
16M     ../build/lib/
  1. 编译出来的库结果
$ file  ../build/lib/libopencv_*.4.10.0
../build/lib/libopencv_calib3d.so.4.10.0:    ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_core.so.4.10.0:       ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_features2d.so.4.10.0: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_flann.so.4.10.0:      ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_imgcodecs.so.4.10.0:  ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_imgproc.so.4.10.0:    ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_stitching.so.4.10.0:  ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped

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

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

相关文章

Python cv2对象检测与跟踪:从基础到进阶实战

在计算机视觉领域,对象检测(定位目标位置)与对象跟踪(持续追踪目标运动)是视频分析、自动驾驶、智能监控等应用的核心技术。本文将结合OpenCV的cv2库,系统讲解其原理与Python实现方法。 一、对象检测 vs 对…

亚马逊推出新型仓储机器人 Vulcan:具备“触觉”但不会取代人类工人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

缓存套餐-03.功能测试

一.功能测试 点击小程序,就会触发根据分类id查询套餐方法,根据分类id查询套餐。 第一次查询,redis中没有数据,就会发sql进行sql数据库查询。 redis当中就有了对应的缓存。 再次点击,发现sql根本没有执行,…

WebFlux与HttpStreamable关系解析

1-Streamable 1-WebFlux与HttpStreamable关系解析2-MCP协议Streamable HTTP 2-参考网址 MCP协议Streamable HTTPMCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案 3-WebFlux与HttpStreamable关系解析 WebFlux 和 HttpStreamabl…

顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%

导读:顺丰科技引入 Doris 替换 Presto,在内部可视化数据自助分析工具丰景台场景广泛应用。目前,顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中,日均查询量 100W。并实现 P95 性能提升近 3 倍&…

如何在Jmeter中调用C程序?

在JMeter中调用C语言程序可以通过以下几种方式实现: 方法一:使用OS Process Sampler JMeter的“OS Process Sampler”可以用来调用外部程序,包括C语言编写的可执行文件。 步骤: 准备C语言程序: 编写C语言代码并编译…

python 中的单例

在 Python 里,单例模式指的是一个类仅有一个实例,并且提供一个全局访问点来获取该实例。下面为你介绍几种实现单例模式的常见方法。 1. 使用模块 在 Python 里,模块天然就是单例模式。当模块被导入时,Python 会对其进行一次加载…

Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址

判断为NAT模式网卡 能ping 通外网 ens34为仅主机模式网卡 [rootlocalhost network-scripts]# ip route show default default via 10.1.1.254 dev ens33 proto static metric 100 10.0.0.0/8 dev ens33 proto kernel scope link src 10.1.1.37 metric 100 11.0.0.0/8 dev…

web 自动化之 selenium+webdriver 环境搭建及原理讲解

文章目录 一、web 自动化测试学习说明二、什么 web 自动化测试三、selenium 简介四、web自动化测试环境搭建五、web 自动化测试第一个脚本六、selenium 原理及源码讲解 一、web 自动化测试学习说明 进阶 web 自动化测试学习:掌握 python 编程基础 二、什么 web 自…

Linux 网络命名空间:从内核资源管理到容器网络隔离

1. 网络命名空间是什么? 网络命名空间(Network Namespace) 是 Linux 内核提供的一种网络资源隔离机制,用于为进程或容器创建完全独立的网络环境。它并非物理或虚拟的网络接口(如网卡、veth pair 等),而是一个虚拟容器,包含以下资源的独立实例: 网络接口(物理或虚拟)…

SQL知识点总结

总结的知识点主要来源于前段时间在牛客刷SQL题目中遇到的错误 目录 1.WHERE字句不能与高级函数连用 2.去重——distinct 3.不等于某个值 4.查多个范围内的值 5. 升/降序排序 6.占位符 7.统计某类别总数计算平均值 8.合并查询——UNION (ALL) 9…

【软考-高级】【信息系统项目管理师】【论文基础】采购管理过程输入输出及工具技术的使用方法

采购管理概念 项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程。项目采购管理包括编制和管理协议所需的管理和控制过程,例如合同、订购单、协议备忘录(MOA)和服务水平协议(SLA)。 采购管理…

C++ 手写一个内存池

内存池是一种内存管理技术,它预先分配一大块内存,之后将其按需分割成多个小块供程序使用。下面将详细阐述它的好处以及适用场景。 内存池的好处 减少内存碎片:在动态内存分配时,频繁地分配和释放不同大小的内存块,会…

LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述

【LetMeFly】3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述 力扣题目链接:https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一个地窖,地窖中有 n x m 个房间…

学习Linux的第四天

今天我们来学习Linux的网络配置,以及链表的知识开个小头 三种网络配置模式 桥接模式(用的最多) 2.Nat模式 3. 仅主机模式(Nat模式的功能外,只能在局域网通信,不能访问外网) 桥接模式&#xf…

【 window.addEventListener(‘message‘, handleMessage)无效的问题】

在react native加载中可能出现 window.addEventListener(‘message’, handleMessage)无效,无法监听到在react-native-webview中通过postMessage发送的消息,可以通过下面的方法来处理 window.addEventListener(message, handleMessage);document.addEven…

css识别\n换行

在CSS中,\n 通常不会被识别为换行符。如果你希望在CSS中实现换行效果,可以使用以下几种方法: 使用 white-space 属性: 设置 white-space: pre 或 white-space: pre-wrap,这样文本中的换行符 \n 会被保留并显示为换行。…

电容知识小结

1.同样是电容,1uf的陶瓷电容和1uf的铝电解电容是不一样的; 2.实际的电容等效为ESR C ESL;ESR等效电阻和ESL等效电感; 3.铝电解电容,瓷片电容和钽电容。 4.电容是容纳和释放电荷的电子器件; 5.电容的工作:…

[逆向工程]什么是HOOK(钩子)技术(二十一)

[逆向工程]什么是HOOK(钩子)技术(二十一) HOOK(钩子)是一种系统级或应用级的消息拦截与处理机制,广泛用于监控、修改或增强程序行为。其核心思想是在特定事件(如键盘输入、函数调用…

java后端知识点复习

# 复习汇总 ### 🧑‍💻 User java关于高并发下的银行转账问题,根据具体的例子来讲解清楚 --- ### 🤖 Assistant --- ### 🧑‍💻 User java关于高并发下的银行转账问题,根据具体的例子来讲…