您的位置:首页 > 移动开发 > Android开发

android项目在不装opencvmanager.apk情况下,直接使用

2015-11-18 18:21 519 查看
前一段时间公司项目要用到OpenCV的东西做图像处理,但是一般都要安装OpenCV的apk包才能正常使用(估计是要导入那些os库)

但是老板认为自己的apk安装之后,还要装别的apk,显得很菜,要求不安装OpenCV的apk

没有办法,只能安装老板说的来做.(只是想吐槽一下)自己以前在上大学的时候接触过一点点的C++.

在网上找了很多资料,OpenCV使用C代码来写的,源代码也下载下来了(文章最后会贴上OpenCV源代码的下载)

因为都是C的源码,,于是就想到,可以用NDK来调用.

说干就干吧,解压OpenCV的源码后,可以看到

1.


幸好里面有个sample,,估计就是例子,打开之后

2.


看了很久,这个face-detection里面就是直接调用源代码,不需要安装apk,也调用到JNI了.

于是乎............哈哈

自己本来对MK文件也不是特别的熟悉,,就拿这个项目的MK文件直接修改了,(face-detection/jni/Android.mk),里面Android.mk源文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#OPENCV_CAMERA_MODULES:=off
#OPENCV_INSTALL_MODULES:=off     >>>>>如果这个设置为off产生很多os库,,设置为on只产生一个os库
#OPENCV_LIB_TYPE:=SHARED
include ../../sdk/native/jni/OpenCV.mk  >>>>这里是OpenCV源码C的路径里面的Mk文件

LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl

LOCAL_MODULE     := detection_based_tracker

include $(BUILD_SHARED_LIBRARY)

然后在自己的项目里面配置NDK,,具体配置NDK的方法的话,网上有很多,,根据自己的需要配置NDK版本

然后在自己的工程下面新建一个jni的文件夹

把这4个文件全部都考进去



修改Android。mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_CAMERA_MODULES:=off
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
#OPENCV_LIB_TYPE:=STATIC
include ../sdk/native/jni/OpenCV.mk  =====>>>>>这个是关联源码的文件,我是吧OpenCV的sdk文件复制到了我的项目同一个目录下面,,,这个看情况修改

LOCAL_SRC_FILES  := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS     += -llog -ldl

LOCAL_MODULE     := detection_based_tracker

include $(BUILD_SHARED_LIBRARY)


源码文件就是OpenCV包里面的sdk文件的目录

然后clean一下项目,,自动回生成jar包.然后使用跟以前一样.

注意注意:在加载OpenCV的时候不一样,看代码

<span style="font-size:12px;">@Override
protected void onResume() {
super.onResume();
//		OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10,this, mLoaderCallback);
//			System.out.println(1);
//
//			System.load("/system/lib/libnative_camera_r4.4.0.so");
//			System.load("/system/lib/libopencv_dynamicuda.so");
//			System.load("/system/lib/libopencv_info.so");
//			System.load("/system/lib/libopencv_java.so");
//			System.load("/system/lib/libOpenCVEngine_jni.so");
//			System.load("/system/lib/libOpenCVEngine.so");

if(OpenCVLoader.initDebug()){
handler.sendEmptyMessage(HandlerWhatLib.LOAD_OPENCV_FINISH);
}

}</span>


就是加载不一样,加载过程,在文档上说最好在onresume里面加载,好了就可以尽情的享用了.

最后,不好意思opencv源码文件太大,传不上来,大家可以百度去下载.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv Android