在Android中使用OpenCV非免费模块 [英] Using OpenCV nonfree module in Android

查看:102
本文介绍了在Android中使用OpenCV非免费模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Android上的OpenCV中使用nonfree模块.我正在按照这个答案 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)

Application.mk:

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

项目结构:

我的项目在jni .h文件中的行#include <opencv2/nonfree/nonfree.hpp>崩溃,所以这就是为什么我要导入nonfree模块的原因.

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

答案:

构建非免费模块:

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

步骤2:我不知道在应用程序或计算机中应在何处创建此文件夹?

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

对于构建示例应用程序",我还没有涉及到这一部分,但是我想我不需要这样做,我可以继续在我的应用程序中使用OpenCV,除非#include <opencv2/nonfree/nonfree.hpp>行可以使用./p>

我试图将这个问题弄清楚,如果您需要更多信息,我们将很乐意对其进行编辑.

解决方案

第2步:在jniLibs文件下创建文件夹或直接将4个文件放入

.

第3步:

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)中添加外部工具

I'm trying to use the nonfree module with OpenCV on Android. I'm following this answer https://stackoverflow.com/a/28557686/6126070 but I'm having trouble understanding it since this is my first application using Android and NDK.

Right now, OpenCV (without nonfree) is working on my application and I'm using it in C++ code with NDK and JNI. What I'm having trouble with is editing my current Android.mk and Application.mk files to thoses in the answer to compile nonfree.

Here is my Android.mk and Application.mk files with the structure of my project.

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)

Application.mk :

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

Project structure :

My project crashes with the line #include <opencv2/nonfree/nonfree.hpp> in my jni .h file so that's why I'm trying to import nonfree module.

So as I said, I'm trying to implement the answer linked above but I'm having trouble.

In the answer :

Building the nonfree module :

Step 1 : I'm copying the files just fine.

Step 2 : I don't understand where I'm supposed to create this folder, in my application or in my computer ?

Step 3 : Here is the big problem, I don't know how I can merge the Android.mk and Application.mk files provided in the answer with mine. Furthermore, I don't understand the line "cd into the project folder libnonfree and type ndk-build to build the libnonfree.so."

For the "Building a sample appliaction" I haven't been to this part yet but I supposed I don't need to do it I can just keep using OpenCV with my application except the #include <opencv2/nonfree/nonfree.hpp> line will work.

I tried to make this question clear, if you need more information I will gladly edit it.

解决方案

Step2: Create folder under your jniLibs file or put 4 file directly.

Step3:

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)

and you can search how to add External tool in android studio (ndk-build)

这篇关于在Android中使用OpenCV非免费模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆