我想在我的安卓应用程序中使用一些原生c++代码/库。c++部分在很大程度上基于openCV。
我知道openCV - Android,并且看到了很多关于如何使用android(比如这一个)的详细教程,但这些都只是使用opencv,它只支持有限的opencv功能子集(我不是说那些在移动设备上没有意义的功能,比如gpu相关的功能,但是有些其他功能在opencv-android中根本不存在,我需要它们来编写c++代码)。
无论如何,我的问题是:我是否可以在Android项目中编译和使用openCV的“完整模块集”(使用NDK等)?
我也看到了这一个,它声称“它将为安卓构建大部分OpenCV模块”,但我不清楚如何使用它.
任何提示都将不胜感激!
发布于 2015-05-13 07:27:36
好的!我想我想出来了!基本上,我们需要遵循本教程,但只需替换Android.mk中的路径,以指向已编译的openCV完整版本,而不是openCV(以及其他一些小的更改;对于那些只需复制Android.mk
和Application.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编译openCV的简短说明:
对于使用NDK编译完整openCV,仍然可以使用上述这里方法;描述基于NDK-r8e,但如果需要,可以下载NDK-r10d并使用它。我不得不在openCV源代码中关闭与cuda相关的部分,以便用NDK成功地编译它(只需在cmake
之后的最后一行将-D WITH_CUDA=OFF
添加到opencv-2.4.10/platforms/scripts/cmake_android_arm.sh
中即可!)。如果您需要有非免费的模块(如SURF和SIFT,不要从github克隆它,只需从这里下载它就可以了;顺便说一下,我使用了2.4.10版本)。
现在,我几乎可以访问本机openCV代码中的几乎所有c++功能,我正在将这些功能集成到我的Android中!
我希望这对其他人也有帮助!
发布于 2015-05-12 17:51:33
https://stackoverflow.com/questions/30202842
复制