关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀
使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到使用gradle的方案,摸了几天,总算是摸清楚了。
其实找对了方法,用android studio配置环境要比eclipse简单很多,首先是预先准备的环境:
1.Android studio,官网最新版,我用的是2.3.1;
2.OpenCV4Android,官网最新版,我用的3.2.0;
就这两个就行了,不需要像eclipse一样手动配置jni啊adt啊一堆有的没的。
配置步骤如下:
【1.新建项目】
选中”Include C++ support”,后面无脑next,Android会帮你把jni环境直接配置好。等gradle build完毕,可以在project窗口的Android标签页下看到有External Build Files,下面是一个CMakeList.txt文件,这个是Android Studio自动生成的一个makefile,相当于用cmake编译jni的部分,如果你cmake用得很熟练,那么只要在这个文件里配置好opencv的路径,再在gradle里加点参数就可以轻松搞定,具体过程如下:
【2.编辑CMakeList.txt】
在CMakeList.txt中增加如下条目:
项目路径和opencv路径
set(pathToProject D:/ImageProcess/JniExample)
set(pathToOpenCv D:/OpenCV-android-sdk)
支持-std=gnu++11
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
配置加载native依赖
include_directories(${pathToOpenCv}/sdk/native/jni/include)
动态方式加载
add_library( lib_opencv SHARED IMPORTED )
引入libopencv_java3.so文件
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)
可以看到配置里有一个{pathToProject}/app/src/main/jniLibs/{ANDROID_ABI}/libopencv_java3.so文件,我们暂时还没有,需要我们手动创建相应的jniLibs目录,这个目录会被Android Studio自动识别作为编译jni代码时的库目录。
创建好如图的目录以后,将OpenCV-android-sdk\sdk\native\libs下的文件夹全部复制到jniLibs下面。
最后,在CMakeList的target_link_libraries中添加一条lib_opencv:
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib}
lib_opencv)
【3.gradle配置】
在项目根目录下新建文件夹“distribution”,将OpenCV-android-sdk\sdk\native\jni下的include文件夹拷贝过去,再将OpenCV-android-sdk\sdk\native下的libs文件夹拷贝过去。(这个方法参考了某个博客,恕我记性不好没法贴出来源……如果不拷贝直接使用OpenCV-android-sdk下的路径应该也是可以的)
在Gradle Scripts下应该有两个build.gradle,其中一个是Project的,我们不用管,打开Module:app的gradle,在最外层添加一行def lib_distribution_root = ‘../distribution’
在android节点的defaultconfig下添加:
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64'
}
}
注意这和AS自动生成的externalNativeBuild的位置是不一样的,两条都要有,再在android节点下添加:
sourceSets {
main {
jniLibs.srcDir(['${lib_distribution_root}/libs'])
}
}
如此,我们就可以在cpp文件夹中添加C++类,并使用opencv库了,注意每添加一个cpp文件都要在CMakeList中add_library下添加一个源文件路径(和通过mk文件编译一样)。
【4.OpenCV4Android和jni的联动】
我们依旧需要通过java层调用android api来获取摄像头数据,比较简便的方法是file- new- import module,选中OpenCV-android-sdk\sdk\java,把java版的opencv作为模块添加进来,然后在我们的app上右键- open module settings- dependencies- ‘+’- add module dependency,把opencv模块添加依赖,然后可以参考OpenCV-android-sdk\samples\tutorial-1-camerapreview来获取摄像头数据,java版的mat对象有一个GetNativeObjAddr()成员函数,获取一个long类型的mat地址,作为参数传递给native层,即可利用这个地址改变java层的mat对象,进行一系列图像处理。
以上这篇Android Studio中使用jni进行opencv开发的环境配置方法就是小编分享给大家的全部内容了,希望能给大家一个参考。
关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀的更多相关文章
- 【新手指南】Android Studio中应用App的相关配置
前言: 注意这是一个对于Android开发入门学习者而言的一个教程,因为自己平时很少使用Android进行原生应用的开发,对于使用Android Studio配置Android App应用的一些参数( ...
- 如何在Android Studio中导入JNI生成的.so库
由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中.而Android Studio目前为止(0.86版 ...
- 在android studio中集成javah, ndk-build进行JNI开发
最近在搞一个android上控制LED灯闪烁的功能,用到了串口编程,搜索了一下,发现Google发布了一个demo,android-serialport-api.有现成的代码和APK,要想自己改JNI ...
- Android Studio中配置及使用OpenCV示例
Android Studio配置及使用OpenCV 前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资 ...
- OpenCV - Android Studio 中集成Opencv环境(包含opencv_contrib部分)
我在上一篇博客中说到了在Android中集成OpenCV,但是那个版本的OpenCV是没有SIFT和SURF算法的,因为这些算法是受专利保护的,所以并没有被包含在预编译库中,所以如果想要使用SIFT和 ...
- OpenCV - Android Studio 中集成Opencv环境(不包含opencv_contrib部分)
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,支持的运行环境也是非常的多,这篇文章主要讲的是Android环境集成OpenCV(IDE是Android Studio,我想Eclip ...
- android studio使用ndk,jni随记
1.下载ndk(会下载到sdk目录下) 2.配置 3.配置build.gradle(app) android { defaultConfig { ndk { moduleName "JniD ...
- Android如何使用so文件和Android studio中导入so
Android中使用so文件: 做一个PDF阅读的功能,找到一个开源的库,mupdf.下载的是网上编译好的so库,导入到自己项目中的时候一直报错Java.lang.UnsatisfiedLinkErr ...
- 在Android studio中进行NDK开发
在Android studio中进行NDK开发 分类: Android平台 软硬件环境 ubuntu kylin 14.04 红米note增强版 Android studio 0.8.6 ndk ...
随机推荐
- 【Vulhub】CVE-2019-3396 Confluence RCE漏洞复现
CVE-2019-3396 Confluence RCE漏洞复现 一.环境搭建 选择的vulhub里的镜像,进入vulhub/Confluence/CVE-2019-3396目录下,执行 docker ...
- 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...
- C++ 中explicit的作用
转载:https://www.cnblogs.com/diligenceday/p/5781408.html C++ 中explicit的作用 explicit作用: 在C++中,explicit ...
- C++ “string”: 未声明的标识符
转载:https://blog.csdn.net/kkkmmmjjjj/article/details/53780549 解决方案: 要添加using namespace std;语句在宏定义后面. ...
- C++中stack
参考:https://blog.csdn.net/u012655441/article/details/64920825 C++中stack的用法 转载:xueruifan的博客 C++ Stack( ...
- 【题解】[USACO13FEB]Tractor S
题目戳我 \(\text{Solution:}\) 好久没写啥\(dfs\)了,借这个题整理下细节. 观察到答案具有二分性,所以先求出其差的最大最小值,\(\log val\)的复杂度不成问题. 考虑 ...
- Oracle体系结构概述与SQL解析剖析
Oracle服务器 是一个数据库管理系统,它提供了一种全面.开放.集成的方法来管理信息. Oracle服务器由Oracle数据库和Oracle实例组成. oracle数据库软件和Oracle数据库软件 ...
- 晋城6397.7539(薇)xiaojie:晋城哪里有xiaomei
晋城哪里有小姐服务大保健[微信:6397.7539倩儿小妹[晋城叫小姐服务√o服务微信:6397.7539倩儿小妹[晋城叫小姐服务][十微信:6397.7539倩儿小妹][晋城叫小姐包夜服务][十微信 ...
- CentOS 7的安装与部署 02
2.2 操作系统安装过程 第01步:加载系统镜像 第02步:启动虚拟主机 第03步:系统安装选择界面修改网卡名称 启动虚拟机后,会出现选择菜单,首先用方向键选择 install centos7选项,然 ...
- vagrantfile-参考示例
Vagrantfile 文件 bt为你需要新建的box名字 Vagrant.configure("2") do |config| config.vm.box = &qu ...