android搭建opencv开发环境,Android Studio搭建opencv开发环境

文章不配图片,阅读需要有Android开发基础并熟悉Android Studio。

一、搭建基于Java开发环境

以下内容介绍如何搭建基于Java jni的opencv开发环境。

1、准备工作

从opencv官网下载Android平台开发sdk并解压,假设解压后文件夹名为opencv-4.3.0-android-sdk。(此处以4.3.0为例)

2、创建项目

使用Android Studio(下简称AS)创建项目,假设项目名叫 cvdemo。

3、创建Module

创建新的Module作为opencv sdk,假设其名为opencv4。

之所以选择创建新Module而不是导入,只是因为opencv提供的目录结构像是ADT,gradle将会有大量配置目录的信息。

4、导入代码

将java代码和res资源放进Module的对应目录;

将存放本地动态文件*.so的 /opencv-4.3.0-android-sdk/sdk/native/libs/ 目录拷贝到opencv4的根目录下,即:/cvdemo/opencv4/libs/。

打开opencv4的build.gradle,在android内添加sourceSets,如下:

android {

...//其他配置信息

sourceSets {

main {

jniLibs.srcDirs = ['libs']//此目录即为上述添加的目录

}

}

...//其他配置信息

}

刷新项目,项目下会出现名为jniLibs的虚拟目录,并能查看到对应平台下的本地动态文件*.so。

此时已经可以依赖此Module实现Java开发。

二、搭建基于C/C++开发环境

虽然opencv提供面向Android的SDK,但是实际测试效果并不理想,特别在遍历Mat的时候,那效率简直感人。所以采用本地开发也是不错的选择。

继续配置以下内容实现本地开发,以下内容假设项目是在 app Module内做本地开发。

5.配置jni开发

打开项目的local.properties文件,AS默认没有配置ndk目录,确保ndk目录配置正确:

// 把sdk.dir和ndk.dir路径修改成你自己的目录

sdk.dir=/Applications/Android_SDK_Manager

ndk.dir=/Applications/Android_SDK_Manager/ndk/21.1.6352462

6.复制头文件

找到头文件*.h和*.hpp所在的目录/opencv-4.3.0-android-sdk/sdk/native/jni/include/,将其下的所有内容(在4.3.0版本,其下只有一个opencv2目录)拷贝到/opencv4/src/main/cpp/下。

因为头文件不是开发源代码,所以不需要添加到build.gradle里。

只要让CMakeLists.txt能导入即可。

7. 创建CMakeLists.txt

创建目录/cvdemo/app/src/main/cpp/,做为本地开发代码的目录。

假设本地项目只有my_native.cpp一个文件,并将编译成名为libmy_native.so的动态文件。

在cpp目录下创建文件CMakeLists.txt,内容如下:

#CMakeLists.txt

#定义变量,名为opencv,值为opencv sdk(opencv4 Module)目录,

#为了项目导入导出后不用修改,此处采用相对路径定位。

#CMAKE_SOURCE_DIR变量为CMakeLists.txt所在目录。

set(opencv ${CMAKE_SOURCE_DIR}/../../../../opencv4)

cmake_minimum_required(VERSION 3.4.1)

#配置加载native依赖

#引入opencv头文件所在目录

include_directories(${opencv}/src/main/cpp)

#引入opencv库

add_library(

opencv_java4

SHARED

IMPORTED)

#引入动态文件

set_target_properties(

opencv_java4

PROPERTIES IMPORTED_LOCATION

${opencv}/libs/${ANDROID_ABI}/libopencv_java4.so)

#以下为开发的本地库的配置,此处不做详解

add_library(

my_native

SHARED

my_native.cpp)

find_library(

log-lib

log)

target_link_libraries(

my_native

#此处也要添加

opencv_java4

${log-lib})

8. 修改build.gradle

接着修改本地源码所在的Module(此处假定的是app)的build.gradle,内容如下:

android {

...//其他配置信息

defaultConfig {

...//其他配置信息

externalNativeBuild {

cmake {

cppFlags "-frtti -fexceptions"

arguments "-DANDROID_STL=c++_shared"//导入C++标准库

}

}

ndk {//需要编译的平台

abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'

}

}

externalNativeBuild {

cmake {

path "src/main/cpp/CMakeLists.txt"//cmake所在位置

version "3.10.2"

}

}

...//其他配置

}

...//其他配置

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

//最后别忘了引用opencv sdk Module

implementation project(path: ':opencv4')

...//其他引用内容

}

9、其他

my_native.cpp提供的jni接口函数,本文不做赘述,可以查看其他相关文档。

因为各种配置相关路径在build.gradle和CMakeList.txt里都可以修改,所以可以根据自己情况做修改。

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

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

相关文章

99 网络编程_网络工程师技能图谱,看看你会多少技能

技术推动了时代变革,互联网则加速了这场变革。在蓬勃发展的互联网浪潮下,网络作为基础设施的关键纽带保障着网路流量的顺利流通,维持着赛博世界的繁荣。而在这繁荣之下,生存着这样一个群体——网络工程狮,为网络纽带保…

python 3.8.0安卓_Python for Mac v3.8.0 官方最新版

Python for Mac是一款全新推出的编程工具,所有 python.org macOS 安装程序都附带了 OpenSSL 的内置副本。此外,还有一个针对 macOS 10.9 的新增安装程序变体,其中包含 Tcl / Tk 8.6的内置版本,有需要的朋友快来下载试试吧!Python …

线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

点击上方“Coder编程”,选择“置顶公众号”技术文章第一时间送达!并发编程.png每天进步一点,不做curd工程师与Api调用工程师 欢迎访问个人博客网站:https://www.coder-programming.cn/ 作者:liuxiaopeng | http://www…

4位先行进位电路 logisim_你真的了解74系列集成电路吗?让我帮你总结一下

74系列集成电路大致可分为6大类:74(标准型)74LS(低功耗肖特基)74S(肖特基)74ALS(先进低功耗肖特基)74AS(先进肖特基)74F(高速)HC为COMS工作电平;HCT为TTL工作电平,可与74LS系列互换使用HCU适用于无缓冲级的CMOS电路。这9种74系列产品&#xf…

android ios av tv,iOS使用AVPlayer制作战旗TvDEMO OC版

在视频教学中看到一个别人写的战旗TvDEMO写得很好,于是自己动手试着制作一个。效果如下图所示主界面竖屏播放横屏播放点击出现工具栏视频播放使用的是AVPlayer,具体的使用方式如下//---PlayView---_playView [[UIView alloc]init];_playView.frame CGRectMake(0, …

matlab 子图title的位置_matlab 画图基本介绍

1.在命令窗口输入命令时&#xff0c;可以不必每输入一条命令就按enter键执行&#xff0c;可以在输入几行后一同运行。方法是&#xff1a;换行时&#xff0c;只要在按住<shift>键的同时按<enter>键即可&#xff0c;否则matlab就会执行上面输入的所有语句。2.如何将数…

python程序打包成安卓app教程_Python打包方法基本应用方式介绍

Python编程语言是一款功能强大的免费开源的通用型计算机程序应用语言&#xff0c;对于经验丰富的开发人员来说&#xff0c;掌握这样一款语言在其程序开发中是一个比较重要的选择。我们今天就先来了解一下python打包方法的相关应用。 一、简介 py2exe是一个将Python脚本转换成wi…

android添加删除项目,编写android计算器添加删除按钮,出现很抱歉,XX项目已停止运行。...

这是删除按钮监听代码&#xff1a;//del 按钮的监听btnDel (Button) findViewById(R.id.delete);btnDel.setOnClickListener(new OnClickListener() {Overridepublic void onClick(View view) {btnDel.setOnClickListener(this);//短按//btnDel.setOnLongClickListener(this);…

二元一次方程有唯一解的条件_人教版初中数学七年级下册用适当方法解二元一次方程组公开课优质课课件教案视频...

解二元一次方程组---加减法一、教学目的&#xff1a;1&#xff0e;使学生掌握用加减法解二元一次方程组的步骤。2&#xff0e;熟练运用加减法解二元一次方程组。3&#xff0e;培养学生分析问题、解决问题的能力。二、教学重点、难点和关键&#xff08;一&#xff09;重点&#…

为什么从网页上打印怎们好像被缩放_全网最详细关于3D打印的zbrush技术

这个小教程旨在为刚开始对3D打印感兴趣的新人朋友提供一些快速上手小技巧&#xff0c;以便在zbrush中制作适合桌面FDM 3D打印的创作&#xff0c;本次小教程需要读者已经有一些zbrush基础知识。1设置系统单位导入1英尺的box&#xff0c;1英尺X1英尺X1英尺。一旦导入到场景中&…

android图片浏览远近,快图浏览编辑图片方法介绍_怎么编辑图片_3DM手游

既然是图片管理工具&#xff0c;那么快图浏览肯定也是少不了图片编辑功能的。如何使用快图浏览编辑图片呢&#xff1f;下面小编带来的详细的使用方法&#xff0c;有需要的小伙伴一起来看看吧&#xff01;编辑照片方法介绍&#xff1a;1.第一步&#xff0c;下载安装快图浏览&…

h5微信本地调试 vue_vueh5中使用微信sdk

微信官方sdk教程安装vue 微信sdk 使用NPM安装&#xff0c;不会的百度学npm install jweixin-module --save创建一个wxsdk.js 文件// 引入微信sdkvar jweixin require(jweixin-module);export default {//判断是否在微信中isWechat: function() {var ua window.navigator.user…

matlab 三维 作图 坐标轴_MATLAB学习——MATLAB中的三维绘图指令

2 基本XYZ立体绘图命令mesh和plot是三度空间立体绘图的基本命令&#xff0c;mesh可画出立体网状图&#xff0c;plot则可画出立体曲面图&#xff0c;两者产生的图形都会依高度而有不同颜色。下列命令可画出由函数形成的立体网状图: xlinspace(-2, 2, 25); % 在x轴上取25点 ylins…

说说python程序的执行过程_表示说的词语

展开全部1、奉劝 [ fng qun ] 释义&#xff1a;敬辞。郑重劝说62616964757a686964616fe58685e5aeb931333365653331。 造句&#xff1a;我们厌恶那些阴险的恶人&#xff0c;奉劝他们改恶为善&#xff0c;才能得到社会的原谅&#xff01; 2、劝告 [ qun go ] 释义&#xff1a;拿道…

HTML4基本编译原理,Stanford公开课《编译原理》学习笔记(1~4课)

课程里涉及到的内容讲的还是很清楚的&#xff0c;但个别地方有点脱节&#xff0c;任何看不懂卡住的地方&#xff0c;请自行查阅经典著作《Compilers——priciples, Techniques and Tools》(也就是大名鼎鼎的龙书)的对应章节。一. 编译的基本流程完整的编译的5个基本步骤包括lex…

rocketmq 消息指定_SpringBoot 整合 RocketMQ 如何实现消息生产消费?

有时候我们在使用消息队列的时候&#xff0c;往往需要能够保证消息的顺序消费&#xff0c;而RocketMQ是可以支持消息的顺序消费的。RocketMQ在发送消息的时候&#xff0c;是将消息发送到不同的队列中&#xff0c;然后消费端从多个队列中读取消息进行消费&#xff0c;很明显&…

mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...

水果很多人都喜欢吃&#xff0c;南方人可以说是最幸福的&#xff0c;因为南方的水果种类有很多种&#xff0c;而且水果的价格也很便宜&#xff0c;一年四季都能吃到便宜又好吃的水果&#xff0c;南方的很多水果&#xff0c;北方人可能都没有吃过&#xff0c;虽然南方的水果种类…

html页面怎么加向下滚动,如何使用jQuery向上或向下滚动页面到锚点?

如何使用jQuery向上或向下滚动页面到锚点&#xff1f;我正在寻找一种方法来包含幻灯片效果&#xff0c;当您单击页面上或下的本地锚点链接时。我想要一个你有这样一个链接的东西&#xff1a;link text, img etc.也许添加了一个类&#xff0c;所以你知道你希望这个链接是一个滑动…

vuex中的值变化 页面重新渲染_浅谈浏览器的渲染过程,重绘与回流

浏览器的渲染过程 首先&#xff0c;我们先来了解一下浏览器的渲染过程是什么样的&#xff0c;也就是说浏览器把一堆代码呈现到页面上的过程是什么样子的&#xff0c;浏览器采用流式布局模型(Flow Bsaed Layout)&#xff0c;根据下图&#xff0c;我们可以总结出浏览器的渲染步骤…

vc 将已有项目打包成dll 并应用于其他项目_.NET混淆器 Dotfuscator使用教程:保护你的应用之存档报告文件...

Dotfuscator是一款.NET混淆器和压缩器&#xff0c;防止你的应用程序被反编译。本篇文章将继续上一篇文章与大家分享保护应用程序的后续三个部分&#xff1a;存档报告文件、加强保护和替代方法。存档报告文件作为构建的一部分&#xff0c;Dotfuscator会生成报告文件(在Dotfuscat…