`

Android开发:安装NDK,移植OpenCV2.3.1,JNI调用OpenCV全过程

 
阅读更多

开发环境:Fedora14 , 操作中以root权限操作,这年头Android移植上OpenCV就强大了,可以做很多复杂的视频分析、图像处理工作了!如火灾、人脸、视频行为的分析等。欢迎Android爱好者,加群:248217350。备注:yanzi


一:NDK的安装

首先是安装NDK,安装之前需要安装CDT,具体的参照http://blog.csdn.net/yanzi1225627/article/details/7736364这里来完成。这里再详细记录下NDK的安装过程。google下载NDK,也可以点击这里下载:http://download.csdn.net/detail/yanzi1225627/5015893,下载后输入tar -jxvf android-ndk-r8-linux-x86.tar.bz2 -C /usr/local/android/将其解压到/usr/local/android/ 目录。『注,我的android相关文件都安装在这里。这个目录不是死的。』然后gedit /etc/profile,在里面添加:export PATH=$PATH:/usr/local/android/android-ndk-r8,从安装JDK到eclipse, android, NDK,在/etc/profile文件里,添加的命令一共有如下三条:

export JAVA_HOME=/usr/local/android/jdk1.7.0_04
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:/usr/local/android/android-ndk-r8

只要这三条就行了。然后source /etc/profile 使刚才的设置生效。

在终端里输入:ndk-build,可以测试出ndk安装成功了么有。

注:有的时候也可以通过在线安装方式,在eclipse里点help-install new software,网址输入这个:ADT - https://dl-ssl.google.com/android/eclipse/,也会看到安装NDK Plugins, 如果经过上面的步骤,NDK不能用就把这个也装上。 但如果只装这个,好像不中,找不到ndk安装的目录,也无法配置路径。

二:OpenCV的移植

这里的移植不是像在qt下那么麻烦,这是因为OpenCV退出来直接支持Android的版本,所以不需要自己编译。直接下下来,解压缩就可以了。我用的OpenCV2.3.1,需要的可以直接到csdn资源里下载,链接:http://download.csdn.net/detail/yanzi1225627/5013701,也可以自己到sourceforge上下载,链接:http://sourceforge.net/projects/opencvlibrary/files/opencv-android/,从这里可以看出从OpenCV2.3开始就有编译好的android版本。最新的是2.4.3版本,在2012年12月24发布的。牛逼阿!

接下来就是配置。事实上有两种方法在Android里调用OpenCV,一种是使用OpenCV java Api,一种是通过JNI的方式。这里是针对后者。将OpenCV-2.3.1-android-bin.tar.bz2解压缩,然后将里面的OpenCV-2.3.1拷贝到Eclipse工作空间的平级目录。图示:

为此,我们现先建一个工作空间。新建文件夹/home/yan/TestOpenCV,点eclipse里的File---Switch workspace---other,选中这个目录。切换到这个工作空间后,点Window---Preference--android,选中自己的android-sdk的安装目录,我的是:/usr/local/android/android-sdk-linux。然后就可以在这个工作空间里正常android开发了,如果不设置这个,新建的工程全是红叉叉。

新建一个项目HaveImgFun,包名是package com.testopencv.haveimgfun; 然后将刚才解压缩出来的OpenCV-2.3.1-android-bin\samples"下的includeOpenCV.mk文件拷贝到和项目HaveImgFun同一级目录中。图示:

在 eclipse里选中那个项目,新建一个文件夹jni,然后新建文件:Android.mk,里面的内容是:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include ../includeOpenCV.mk
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#try to load OpenCV.mk from default install location
include $(TOOLCHAIN_PREBUILT_ROOT)/user/share/OpenCV/OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := ImgFun
LOCAL_SRC_FILES := ImgFun.cpp
include $(BUILD_SHARED_LIBRARY)

再新建一个Application.mk, 内容输入:

APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti -fexceptions
APP_ABI:=armeabi armeabi-v7a
然后新建一个cpp文件,ImgFun.cpp, 这个测试程序是将一个图片的上半部分弄黑,然后复原。具体的大家看源码。功能很简单。

内容是:

#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
using namespace cv;
extern "C" {
JNIEXPORT jintArray JNICALL Java_com_example_haveimgfun2_LibImgFun_ImgFun(
JNIEnv* env, jobject obj, jintArray buf, int w, int h);
JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(
JNIEnv* env, jobject obj, jintArray buf, int w, int h){
jint *cbuf;
cbuf = env->GetIntArrayElements(buf, false);
if(cbuf == NULL)
{
return 0;
}
Mat myimg(h, w, CV_8UC4, (unsigned char*)cbuf);
for(int j=0; j<myimg.rows/2; j++)
{
myimg.row(j).setTo(Scalar(0, 0, 0, 0));
}
int size=w*h;
jintArray result = env->NewIntArray(size);
env->SetIntArrayRegion(result, 0, size, cbuf);
env->ReleaseIntArrayElements(buf, cbuf, 0);
return result;
}

}

然后在终端里切换到HaveImgFun目录,也就是在目录/home/yan/TestOpenCV/HaveImgFun下, 终端输入ndk-build, 会生成相应的库。
具体的大家下载源程序把!下载连接:
http://download.csdn.net/detail/yanzi1225627/5016365

【注,下载后将文件解压。然后eclipse里,切换到TestOpenCV空间,点File--import,就可以了。首先测下最后一步,也就是输入ndk-build, 会不会生成相应的库!】

参考:http://www.cnblogs.com/ldr213/archive/2012/02/20/2359262.html





分享到:
评论

相关推荐

    androidNDK调用opencv

    ### Android NDK调用OpenCV库详解 #### 一、前言 在移动应用开发领域,尤其是涉及到图像处理和计算机视觉的应用中,Android NDK(Native Development Kit)结合OpenCV库成为了开发者的首选方案之一。OpenCV(Open ...

    Android平台移植OpenCV后,JNI接口调用OpenCV的例子

    在Android平台移植OpenCV后,通过调用JNI接口调用OpenCV的一个测试例子。重点是博客里提到的相关配置,看看ndk以及OpenCV移植成功了没。相关的配置见博客:...

    Android使用JNI调用Python so解释器

    总结来说,"Android使用JNI调用Python so解释器"涉及到Android NDK开发,JNI接口设计,Python解释器的Android移植,以及跨语言通信等多个技术层面。这种技术虽然复杂,但能充分利用Python的灵活性和Android的广泛...

    Android C++高级编程:使用NDK(完整版带书签).pdf

    《Android C++高级编程:使用NDK》是一本深度探讨Android平台上C++开发技术的权威著作,完整版带有书签,方便读者随时查阅和学习。本书主要针对Android开发者,特别是那些希望利用C++来提升应用性能、降低内存占用...

    Android C++高级编程:使用NDK_中文-高清带目录

    NDK(Native Development Kit)是Google提供的一种工具集,允许开发者在Android平台上使用C和C++编写原生代码,从而实现高性能、低级别的硬件交互以及系统级的功能开发。 本书详细讲解了Android NDK的使用方法和...

    ndk编译opencv源码

    首先,你需要确保已经安装了Android Studio、Android NDK以及OpenCV的源代码。OpenCV的源代码可以从其官方网站下载,通常包含各种平台的支持,包括Android。下载后,解压到本地的工作目录。 接下来,进入OpenCV源码...

    OpenCV 4.9.0 android sdk - 2024 年最新版

    这是 OpenCV 4.9.0 版本的 Android SDK,适用于 Android 平台的开发者。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,包含了超过2500种优化的算法。这个 SDK 包含了所有...

    android中用ndk编译c并用jni调用的demo源码

    Android平台上的原生开发工具包(NDK)和Java本地接口(JNI)是开发者实现C/C++代码与Java代码交互的重要工具。这个“android中用ndk编译c并用jni调用的demo源码”提供了实践NDK和JNI集成的实例,帮助我们深入理解...

    s5pv210_gpio驱动及及其在android2.3.1下jni调用

    s5pv210_gpio驱动及其测试程序,包括了所有的io的操作,通过从设备号区分 在android2.3.1下jni调用~~包括完整的测试程序及使用过程 说明请查阅:http://blog.csdn.net/xdw1985829/article/details/7687917

    Opencv-jni-环境.zip

    在Android开发中,如果使用JNI(Java Native Interface)来调用C++代码,那么`include`文件夹的内容将被链接到NDK(Native Development Kit)编译环境中,使得Java层可以通过JNI函数与C++层的OpenCV库进行交互。...

    高清版 Android C++高级编程:使用NDK

    Android C++高级编程:使用NDK

    MyJni.rar_Android jni_JNI调用脚本_NDK_android_jni

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。"MyJni.rar"这个压缩包文件显然包含了关于Android JNI的实践教程,涵盖了从Java层调用到C/C++代码的...

    openCv_JniLibs

    **OpenCV库与JNI在Android开发中的应用** OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它包含了众多图像处理和计算机视觉的算法,适用于多种平台,包括Android。在Android应用开发中...

    Android C++高级编程:使用NDK(高清完整带书签)电子书

    《移动开发经典丛书:Android C++高级编程:使用NDK》提供了移植、开发以及利用Android平台上的C++和其他原生代码所需要的知识和技能,以便于运行图形化的高级应用和更复杂的原生应用。 内容简介  Android是移动...

    NDK编译 JAVA JNI 原生调用

    NDK编译和JAVA JNI原生调用是Android开发中的高级技术,主要应用于游戏开发、音视频处理、图像识别等对性能要求较高的场景。 1. NDK简介: NDK提供了一套工具,让开发者可以在Android应用中使用本地代码。它包含了...

    在Android中的jni里使用OpenGL ES和OpenCV渲染一幅图片

    这个特定的项目旨在通过JNI调用来结合这两个强大的库——OpenGL ES用于图形渲染,OpenCV用于图像处理,从而在Android设备上显示一幅图片。 OpenGL ES是OpenGL的嵌入式版本,主要用于移动设备和嵌入式系统。它是...

    基于Android底层NDK开发OpenCV环境搭建

    本篇将详细介绍如何在Android环境下利用NDK搭建OpenCV的开发环境。 首先,我们需要从OpenCV官网(http://opencv.org/opencv-3-2.html)下载适用于Android平台的开发包。这个包包含了一系列预编译的库文件,以及必要...

    opencv-3.2.0-android-sdk,新版ndk编译

    1. **安装配置**: 首先确保Android Studio和NDK已经正确安装和配置。将下载的opencv-3.2.0-android-sdk添加到项目中,通常是在项目的jniLibs目录下放置对应的库文件。 2. **JNI接口**: 编写Java层的JNI接口,这些...

    NDK_OpenCV_AndroidStudio:带有 AndroidStudio 的 NDK 和 OpenCV

    在 Android Studio 中使用 NDK 的步骤: 使用函数 getStringFromNative 创建类 NativeClass: public class NativeClass { public native static String getStringFromNative(); } 构建项目以生成类 打开终端。 ...

Global site tag (gtag.js) - Google Analytics