java - 在 Android 中使用 OpenCV 非自由模块

标签 java android c++ opencv android-ndk

我正在尝试在 Android 上将非自由模块与 OpenCV 结合使用。我正在关注这个答案 https://stackoverflow.com/a/28557686/6126070但我无法理解它,因为这是我第一个使用 Android 和 NDK 的应用程序。

现在,OpenCV(没有 nonfree)正在我的应用程序上工作,我在带有 NDK 和 JNI 的 C++ 代码中使用它。我遇到的问题是将我当前的 Android.mk 和 Application.mk 文件编辑为编译非自由的答案中的那些文件。

这是我的 Android.mk 和 Application.mk 文件,其中包含我的项目结构。

Android.mk :

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#opencv
OPENCVROOT:= C:\OpenCV-2.4.10-android-sdk
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

LOCAL_SRC_FILES := com_example_adrien_ndkopencvtest4_OpencvNativeClass.cpp


LOCAL_LDLIBS += -llog
LOCAL_MODULE := MyOpencvLibs 


include $(BUILD_SHARED_LIBRARY)

应用程序.mk:

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

项目结构: enter image description here

我的项目崩溃并显示 #include <opencv2/nonfree/nonfree.hpp> 行在我的 jni .h 文件中,这就是我尝试导入非自由模块的原因。

正如我所说,我正在尝试实现上面链接的答案,但我遇到了麻烦。

在回答中:

构建非自由模块:

第 1 步:我正在复制文件。

第 2 步:我不明白我应该在哪里创建这个文件夹,是在我的应用程序中还是在我的计算机中?

第 3 步:这是个大问题,我不知道如何将答案中提供的 Android.mk 和 Application.mk 文件与我的合并。此外,我不明白“cd 进入项目文件夹 libnonfree 并键入 ndk-build 以构建 libnonfree.so.”这一行

对于“构建示例应用程序”,我还没有接触过这部分,但我想我不需要这样做我可以继续将 OpenCV 与我的应用程序一起使用,但 #include <opencv2/nonfree/nonfree.hpp> 除外。线路将工作。

我试着把这个问题说清楚,如果你需要更多信息,我很乐意编辑它。

最佳答案

第二步:在你的jniLibs文件下创建文件夹或者直接放4个文件。

第三步:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#opencv
OPENCVROOT:= C:\OpenCV-2.4.10-android-sdk
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

LOCAL_SRC_FILES := com_example_adrien_ndkopencvtest4_OpencvNativeClass.cpp


LOCAL_LDLIBS += -llog
LOCAL_MODULE := MyOpencvLibs 


include $(BUILD_SHARED_LIBRARY)


include $(CLEAR_VARS)

LOCAL_C_INCLUDES:= ${OPENCVROOT}/sdk/native/jni/include
LOCAL_MODULE    := nonfree
LOCAL_CFLAGS    := -Werror -O3 -ffast-math
LOCAL_LDLIBS    += -llog

# for 2.4.8, delete the line precomp.cpp \
LOCAL_SRC_FILES := nonfree_init.cpp \
sift.cpp \
surf.cpp
include $(BUILD_SHARED_LIBRARY)

你可以搜索如何在android studio(ndk-build)中添加外部工具

关于java - 在 Android 中使用 OpenCV 非自由模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44212588/

相关文章:

java - Spring Boot + FreeMarker + RestController 加载模板

php - 使用 REST 服务 core_files_upload 上传文件到 Moodle

c++ - 在 C++ 中计算数组中不相等的字符串

java - 从 Controller 访问域对象

Java Swing : Draw a gameboard as a JButton grid backed by a 2D array of objects

android - 是否可以在 RecyclerView 的子级中预加载 WebView 中的数据?

c++ - 如何遍历 boost::exception 中的所有 error_info?

c++ - C++ 中的成员与方法参数访问

java - java比较和排序

java - 如何对层次结构中至少删除两级的任何内容隐藏 java 包