android平台下opencv的编译--包含扩展模块

news2024/11/24 16:59:49

由于项目需要使用安卓平台下opencv的扩展库,对于通用的opencv库, opencv官网提供了android的SDK

但未能提供扩展库,因此需要自己进行源码编译。本文记录android平台下opencv及其扩展库的交叉编译。

前提:主机已安装android-ndk交叉编译器

安装依赖环境

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config

1、源码下载

下载opencv,可手动下载源码和拓展模块源码,解压后分别命名opencv和opencv_contrib文件

Releases - OpenCV

GitHub - opencv/opencv at 4.8.0

GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modules

2、源码编译

设置编译脚本build-opencv-for-android.sh

#!/bin/bash
NDK_ROOT="${1:-${ANDROID_NDK_HOME}}"
SHELL_PATH=$(pwd)

echo $NDK_ROOT

### ABIs setup
declare -a ANDROID_ABI_LIST=("arm64-v8a")

### path setup
INSTALL_DIR="${SHELL_PATH}/android_opencv"
rm -rf "${INSTALL_DIR}/opencv"

### Make each ABI target iteratly and sequentially
API_LEVEL=21
for i in "${ANDROID_ABI_LIST[@]}"
do
    ANDROID_ABI="${i}"
    echo "Start building ${ANDROID_ABI} version"

    TEMP_BUILD_DIR="${SHELL_PATH}/build/android_${ANDROID_ABI}"
    # ### Remove the build folder first, and create it
    rm -rf "${TEMP_BUILD_DIR}"
    mkdir -p "${TEMP_BUILD_DIR}"
    cd "${TEMP_BUILD_DIR}"

    OPENCV_PATH="${SHELL_PATH}/opencv"
    OPENCV_CONTRIB_PATH="${SHELL_PATH}/opencv_contrib"
    INSTALL_PATH=${SHELL_PATH}/out/
    mkdir -p "${INSTALL_PATH}"

    /usr/cmake-3.23.0-rc2-linux-x86_64/bin/cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
          -DCMAKE_TOOLCHAIN_FILE="${NDK_ROOT}/build/cmake/android.toolchain.cmake" \
          -DANDROID_TOOLCHAIN=clang++ \
          -DANDROID_NDK="${NDK_ROOT}" \
          -DANDROID_NATIVE_API_LEVEL=${API_LEVEL} \
          -DANDROID_ABI="${ANDROID_ABI}" \
          -DOPENCV_EXTRA_MODULES_PATH=${OPENCV_CONTRIB_PATH}/modules \
          -DCMAKE_INSTALL_PREFIX=${INSTALL_PATH} \
          -D BUILD_ANDROID_PROJECTS=OFF\
          -D WITH_CUDA=OFF \
          -D WITH_MATLAB=OFF \
          -D BUILD_ANDROID_EXAMPLES=ON \
          -D BUILD_DOCS=OFF \
          -D BUILD_PERF_TESTS=OFF \
          -D BUILD_TESTS=OFF \
          ${OPENCV_PATH}
    # # Build it
    make -j4
    # # Install it
    make install/strip
    # ### Remove temp build folder
    cd "${SHELL_PATH}"
    # rm -rf "${TEMP_BUILD_DIR}"
    echo "end building ${INSTALL_PATH} version"
done

将build-opencv-for-android.sh、opencv和opencv_contrib文件放置于同一目录下

导出NDK安装路径环境变量

export ANDROID_HOME=/usr/android-ndk-r25c/
export ANDROID_NDK_HOME=/usr/android-ndk-r25c/
./build-opencv-for-android.sh

等待编译完成,完成后,编译成功如下,库文件在 ./out/sdk/native/staticlibs/

本文在编译脚本中只设置了安卓arm64-v8a硬件平台的编译,如有需要可自行修改。

问题:编译完成后,不知道为什么,编译没有报错,但在3rdparty目录下并未编译 libtbb.a,可直接使用将官网sdk中的libtbb.a。

参考

GitHub - ShikinChen/build-opencv-for-android: 编译opencv的Android库的脚本

GitHub - tzutalin/build-opencv-for-android: An interactive script to download and build OpenCV and OpenCV contrib for Android

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

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

相关文章

泰迪智能科技受邀参加花都区产教评技能生态链建设政策宣讲培训会

2024年4月8日,由广州市花都区人力资源和社会保障局主办的花都区产教评技能生态链建设政策宣讲培训会在广州市华风高级技工学校顺利举行。广东省人力资源和社会保障厅职业能力建设处鲍彬科长,广州市人力资源和社会保障局职业能力建设处肖飞扬科长&#xf…

volta(轻松切换管理Node.js版本)

Node.js版本管理 Volta提供了一个简单直观的命令行界面,可以轻松地安装、卸载、更新和切换Node.js版本。 Volta 既可以全局使用,也可以在项目级别使用,可以为每个项目单独设置node版本,nvm不行。 下载安装Volta 参考: …

JavaScript ECMAScript标准的与时俱进:从ES6至ES14的革新之路与关键技术特性剖析

ECMAScript(通常缩写为ES)是一种标准化的脚本语言规范,由ECMA International(前身为European Computer Manufacturers Association,欧洲计算机制造商协会)制定。自1997年发布首个版本以来,ECMAS…

JavaScript_注释数据类型

JavaScript_语法_注释&数据类型: 1.2注释: 1.单行注释://注释内容 2.多行注释:/*注释内容*/ 1.3数据类型: 1.原始数据类型(基本数据类型):(只有这五种) 1.number:数字…

网络安全知识知多少?

网络安全知识在当今数字化的世界中显得尤为重要。随着网络技术的不断发展和普及,网络安全问题也日益突出,对个人、组织乃至国家的安全都构成了严重威胁。因此,了解并掌握一些基本的网络安全知识显得尤为重要。 首先,我们需要明白网…

第21天:WEB攻防-JavaWeb项目UWT身份攻击组件安全访问控制;第22天:WEB攻防-JS项目Node.JS框架安全识别审计验证绕过

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

利用免费AI开源引擎:实现图像识别技术在多主体检测中的应用|识别万物|本地化部署

在当今快速发展的图像处理领域,图像主体检测技术已成为提升图像分析效率和精度的关键工具。该技术能够自动识别和定位图像中的一个或多个主要对象,并提供其具体的位置坐标和分类标签。这不仅为图像编辑和优化提供了便利,也为后续的图像识别任…

国芯科技(C*Core)车规MCU产品选型与应用

一、MCU市场概述 MCU(Micro Controller Unit)即微控制器,俗称单片机,是把 CPU 的规格与频率做适当缩减,并将ROM、RAM、A/D转换、各式I/O接口以及Timer等功能整合在单一芯片上,形成芯片级的计算机。 根据…

学习记录14-运算放大器2

目录 前言 一、理想放大器 二、虚断 二、虚短 虚短的两个使用条件 1.虚短概念 2.如果我们将运放的同相端和反相端颠倒会怎样呢? 总结 前言 主要讲述运算放大器的虚短虚断 一、理想放大器 如果没有基础或只是想简单了解,可以看我前一篇文章&am…

C 强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示&am…

SpringBoot碎片化知识

参考资料: java官方词典:https://docs.oracle.com/javase/tutorial/information/glossary.html#F苍穹外卖:https://www.bilibili.com/video/BV1TP411v7v6 JavaBean规范 JavaBean规范是一种类的规范,其要求符合下列条件&#xf…

用Python生成纯色图片的方法

第一步 导入PIL库(事先安装好) 这一步如果PIL搜索不到,可以搜索【pillow】 第二步 设置图片的尺寸(宽度,高度)和颜色 第三步 保存图片为xx格式(png或者jpg) 比如生成一张红色&am…

【数据库】GROUP BY 详解、示例、注意事项

一、基本介绍 GROUP BY 语句在 SQL 中用于将来自数据库表的记录分组,以便可以对每个组执行聚合函数(如 COUNT(), MAX(), MIN(), SUM(), AVG() 等)。使用 GROUP BY 时,数据库会根据一个或多个列的值将结果集分为多个分组&#xff…

在windows中anaconda中安装fasttext (whl 文件安装)

Anaconda安装第三方包(whl文件) windows 安装fasttext 一直不成功,python 版本3.8 网上教程都是 https://www.lfd.uci.edu/~gohlke/pythonlibs/#fasttext 下载然后安装,但是这个网站里我没找到哈哈哈。。。 然后就是成功方案&am…

mapbox解决v-show引起的地图初始化宽高错误的bug

贴个群号 WebGIS学习交流群461555818&#xff0c;欢迎大家 问题 可以看到地图并没有填充完地图 <!DOCTYPE html> <html> <head><meta charsetutf-8 /><title></title><!-- <meta name"referrer" content"strict…

有效确认手机号机主姓名,避免信息错误

在如今信息爆炸的时代&#xff0c;手机已经成为我们生活中必不可少的一部分。手机号码的重要性已经不仅仅是联系工具&#xff0c;更是诸多场景下的实名认证必备条件&#xff0c;如电商、游戏、直播、金融等。为了保证用户信息的准确性和安全性&#xff0c;挖数据平台上的手机号…

2024 年 3 月 Web3 游戏报告:市场趋势与投资动态

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;Footprint Analytics GameFi Research 2024 年 3 月&#xff0c;比特币不断刷新纪录&#xff0c;成功跨越了月中的低谷。受益于宏观经济的积极态势&#xff0c;整个加密货币市场表现突出。与此同时&#xff0c…

PAN1026蓝牙收发芯片

1 概述 PAN1026 系列产品是一款低成本、高集成度的无线 BLE 数据收发芯片&#xff0c;工作在射频 2400MHz ~2483MHz 的通用 ISM 频段。具有较低的系统应用成本&#xff0c;只需要一个 MCU 和少量外部无 源组件即可构建满足无线应用的系统。同时&#xff0c;操作方式非…

制作一个OpenHarmony视频播放器

简介 媒体子系统是 OpenHarmony 中重要的子系统&#xff0c;可以提供音视频播放能力。媒体子系统为开发者提供一套简单且易于理解的接口&#xff0c;使得开发者能够方便接入系统并使用系统的媒体资源。媒体子系统提供以下常用功能&#xff1a; 音视频播放&#xff08;AVPlaye…

AI驱动的云API和微服务架构设计

将人工智能融入到云的API 和微服务架构设计中可以带来诸多好处。以下是人工智能可以推动架构设计改进的一些关键方面&#xff1a; 智能规划&#xff1a;人工智能可以通过分析需求、性能指标和最佳实践来协助设计架构&#xff0c;为 API 和微服务推荐最佳结构。自动扩展&#x…