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

前一段时间公司项目要用到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源码文件太大,传不上来,大家可以百度去下载.



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值