[安卓开发笔记一]Android开发配置opencv环境超详细教程

这篇博客详细介绍了如何在Android Studio中配置OpenCV环境,包括下载OpenCV、安装Android NDK、添加opencv native包、配置编译环境、实现JNI调用。作者提供了两种方法,一种是使用C++实现底层算法并通过JNI传递,另一种是使用opencv封装的jar包进行纯Java层处理。文章还包含了每个步骤的注意事项和可能出现的问题解决办法。
摘要由CSDN通过智能技术生成


前期准备

1 opencv官网,下载opencv for android

2 安装 Android studio

方法一(使用C++实现底层算法再利用jni传递使用):

 

开始配置

1.安装Android NDK

新建项目,建完后可通过Android studio下载Android NDK环境

一般是没有Android NDK的,勾上后点Apply,然后等它下载,安装

PS:需要翻墙,不知道如何翻墙的,参考如下网址

http://blog.softweek.net/article/google-hosts

 

2 添加opencv native

opencv官网上下载好的opencv forAndroid 中的native文件夹,拷贝到建好的工程根目录下,如图

拷贝前:

拷贝后:

3 配置编译环境

编辑gradle.properties文件,增加下面的属性使用旧版的ndk功能(不添加会使用实验性的ndk构建工具)

android.useDeprecatedNdk=true

local.properties文件中配置ndk目录

ndk.dir=D\:\\Android\\sdk\\ndk-bundle
sdk.dir=D\:\\Android\\sdk

(如果是通过Android studio 来安装的Android NDK 这一步可以不用,因为Android studio安装NDK时给你自动配置好了)

编辑build.gradle,在android节点中增加下面的代码

sourceSets.main.jni.srcDirs = []

//禁止自带的ndk功能

sourceSets.main.jniLibs.srcDirs = ['src/main/libs','src/main/jniLibs']

//重定向so目录为src/main/libssrc/main/jniLibs,原来为src/main/jniLibs



task ndkBuild(type: Exec, description: 'Compile JNI source with NDK') {

    Properties properties = new Properties()

    properties.load(project.rootProject.file('local.properties').newDataInputStream())

    def ndkDir = properties.getProperty('ndk.dir')



    if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {

        commandLine "$ndkDir/ndk-build.cmd", '-C', file('src/main/jni').absolutePath

    } else {

        commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath

    }

}



tasks.withType(JavaCompile) {

    compileTask -> compileTask.dependsOn ndkBuild

}



task ndkClean(type: Exec, description: 'Clean NDK Binaries') {

    Properties properties = new Properties()

    properties.load(project.rootProject.file('local.properties').newDataInputStream())

    def ndkDir = properties.getProperty('ndk.dir')



    if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {

        commandLine "$ndkDir/ndk-build.cmd",'clean', '-C', file('src/main/jni').absolutePath

    } else {

        commandLine "$ndkDir/ndk-build",'clean', '-C', file('src/main/jni').absolutePath

    }

}



clean.dependsOn 'ndkClean'

 

加入前:

加入后(代码太长截图没截完):

main中新建jni目录,并在jni中新建Android.mkApplication.mk

Android.mk中加入如下代码

LOCAL_PATH := $(call my-dir)



include $(CLEAR_VARS)





OpenCV_INSTALL_MODULES := on

OpenCV_CAMERA_MODULES := off



OPENCV_LIB_TYPE :=STATIC



ifeq ("$(wildcard $(OPENCV_MK_PATH))","")

include ..\..\..\..\native\jni\OpenCV.mk

else

include $(OPENCV_MK_PATH)

endif



LOCAL_MODULE := OpenCV



LOCAL_SRC_FILES :=



LOCAL_LDLIBS +=  -lm -llog



include $(BUILD_SHARED_LIBRARY)

Application.mk中加入如下代码

APP_STL := gnustl_static

APP_CPPFLAGS := -frtti -fexceptions

APP_ABI := armeabi armeabi-v7a

APP_PLATFORM := android-8

 

这时候,使用gradle构建一下,如果能成功构建出so,说明配置没问题,如下图,点击Android studio右侧的gradle展开,在app->other中找到ndkbuild(没有就刷新)进行构建

 

4 实现jni调用

在建项目时自带的java文件所在的文件夹中,新建一个java文件,声明native方法,这里尝试实现灰度化方法,所以命名为gray

使用javah命令生成头文件,利用ASandroid studio)下方的terminal窗口

如图:

这里需要注意,有大坑,不会javah的人尤其注意,这里不能进入刚才新建的java文件所在那个目录进行生成,会出现找不到“XXX”类错误,使用javah

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值