2015-05-12 95 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函數!

我希望這也能幫助別人!