opencv在android项目中的应用(1)

    到现在为止,在android上使用opencv已经接触过了一段时间,最近又加了个小功能,所以又熟悉了一边这个过程。用的是opencv2.4.0,发现比以前方便了些。

记下了主要步骤,方便以后复查吧~~

elipse、ADT、android sdk这三个名词弄完以后就可以开发android项目了,此处不是重点,略过。

cygwin、ndk这两个名词弄完以后就可以在android项目中添加本地调用c语言的程序,此处不是重点,略过。

步入正题,在android项目中添加opencv程序开发的功能模块。

1    首先下载编译好的android-opencv(http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.0/)

2    在eclipse中新建一个android项目ArtDemo。添加一个类GoodCut,主要是定义功能函数接口。如下

package com.souxieke;
	public class GoodCut {
		static {
			System.loadLibrary("GoodCut");
		}
		public static native int[] Process(String imgPath, int x1,int y1,int x2,int y2);
	}
com.souxieke这个包的层级要搞清楚,以后写cpp文件中函数名要与这个完全对应。

3    把下载的android-opencv解压,把其中的OpenCV-2.4.0文件夹拷贝到你的eclipse项目空间同级目录下,把其中OpenCV-2.4.0\share\OpenCV\OpenCV.mk拷贝

       到你的android项目ArtDemo同级目录下,即eclise项目空间,布局如下图(这些位置一定要这样,否则编译cpp文件时会出错)。









4    进入android项目ArtDemo,新建jni目录。在jni下新建三个文件Android.mk和Application.mk,和自己的c功能模块实现文件(此处我新建了一个名为

      GoodCut.cpp的文件)。文件中内容分别如下,Android.mk和Application.mk两个文件中内容有一定的规则。

     

        /*
	 * Android.mk
	*/
	LOCAL_PATH := $(call my-dir)
	include $(CLEAR_VARS)
	OPENCV_LIB_TYPE:=STATIC
	OPENCV_INSTALL_MODULES:=on

	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    := GoodCut
	LOCAL_SRC_FILES := GoodCut.cpp
	LOCAL_LDLIBS +=  -llog -ldl
	include $(BUILD_SHARED_LIBRARY)
	/*
	 * Application.mk
	*/
	APP_STL := gnustl_static
	APP_CPPFLAGS := -frtti -fexceptions
	APP_ABI := armeabi-v7a
	/*
	 * GoodCut.cpp
	*/
	#include <jni.h>
	#include <opencv2/opencv.hpp>
	#include <cmath>
	using namespace std;
	using namespace cv;
	extern "C" {
		JNIEXPORT jintArray JNICALL Java_com_souxieke_GoodCut_Process(JNIEnv* env, jobject obj, jstring imgSrc,jint x1,jint y1,jint x2,jint y2);
		JNIEXPORT jintArray JNICALL Java_com_souxieke_GoodCut_Process(JNIEnv* env, jobject obj, jstring imgSrc,jint x1,jint y1,jint x2,jint y2) {
			//此处省略函数实现部分,感兴趣的话email:zsoftdevelop@163.com
		}
	}
      注:(1)GoodCut.cpp文件中Java_com_souxieke_GoodCut_Process要与ArtDemp中GoodCut类信息相对应

              (2)Adnroid.mk文件中LOCAL_MODULE    := GoodCut     LOCAL_SRC_FILES := GoodCut.cpp要与GoodCut文件名和GoodCut类中System.loadLibrary("GoodCut");

                        相对应

5    打开cygwin,进入android项目ArtDemo目录,$ndk/ndk-build开始编译cpp文件,编译通过后会生成libs\armeabi-v7a\libGoodCut.so,有了这个so,就可以在

      android程序中调用c语言功能模块了。

      注:此处$ndk/ndk-build前提是要在cygwin的home\username\.bash_profile中添加ndk的路径

       ndk=/cygdrive/d/android/android-ndk-r8b

       export ndk

ok!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值