2015-05-12 69 views
2

我想在我的Android应用程序中使用一些原生C++代码/库。 C++部分主要基于openCV。openCV for Android - NOT opencv-android-sdk

我知道opencv-android-sdk,并且已经看到很多关于如何使用Android Studio(如this one)的详细教程,但是这些都只是使用仅支持有限子集的opencv-android-sdk的openCV函数(我不是在谈论那些在移动设备上没有意义的东西,比如gpu相关的功能,但是其他一些函数在opencv-android-sdk中并不存在,我需要它们用于C++代码)。

无论如何,我的问题是:我可以以某种方式编译和使用我的Android Studio项目(使用NDK等)openCV的“全套模块”?

我也看到了this one,并声称,“[它]将打造最OpenCV的模块[Android的]”,但它不是我清楚如何使用它......

任何暗示将不胜感激!

+0

您可以从http://www.filtrlink.com获取一些书籍,并在搜索框中搜索opencv –

回答

-1

您应该研究JNI(Java本地接口),它是使用Java封装C库的一种方法。你

也可能要考虑让这本书的保持:Mastering OpenCV with Practical Computer Vision Projects

其中进入这个在一些细节上。

+1

感谢您的回复!只要它完全依赖于opencv-android-sdk,我实际上在集成,编译和运行我的C++本地代码到Android应用程序时没有任何问题;当我想用一些额外的模块而不是SDK使用opencv时会出现问题。 (顺便说一下,这本书很棒!谢谢,但它仍然缺少我需要的) – Reza

+0

这并不回答这个问题。 – kunal18

0

好的!我想我知道了! 基本上需要遵循this tutorial,但只需替换Android.mk中的路径指向编译的完整版本的openCV,而不是openCV-Android-SDK(以及其他一些小的更改;对于那些我只是在这里复制的内容我在Android.mkApplication.mk)。

最后,我Android.mk看起来像这样(OPENCVROOT需要正确设置):

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
OPENCVROOT:= /path/to/opencv-2.4.10/platforms/build_android_arm 
OPENCV_CAMERA_MODULES:=on 
OPENCV_INSTALL_MODULES:=on 
OPENCV_LIB_TYPE:=SHARED 
include ${OPENCVROOT}/OpenCV.mk 
LOCAL_SRC_FILES := main.cpp 
LOCAL_LDLIBS += -llog 
LOCAL_MODULE := hello 
include $(BUILD_SHARED_LIBRARY) 

而且Application.mk看起来是这样的:

APP_STL := gnustl_static 
APP_CPPFLAGS := -frtti -fexceptions 
APP_ABI := armeabi-v7a 
APP_PLATFORM := android-19 

只是一个简短的说明上与Android NDK编译的OpenCV :

对于使用NDK编译完整openCV,仍然可以使用提到的方法here;该描述基于NDK-r8e,但如果需要,可以下载NDK-r10d并使用它。我不得不在openCV源中关闭与cuda相关的部分,以便使用NDK成功编译它(只需在cmake之后添加-D WITH_CUDA=OFFopencv-2.4.10/platforms/scripts/cmake_android_arm.sh,在最后一行之后,完成这项工作!)。如果你需要非自由模块(如SURF和SIFT,不要从github克隆它,只需从here下载一个zip文件;顺便说一下,我使用了2.4.10版本)。

现在我可以访问我正在集成到Android应用程序中的本地C++代码中的几乎所有openCV函数!

我希望这也能帮助别人!