相关疑难解决方法(0)

Android Studio中的OpenCV

我想在Android Studio的应用程序中使用OpenCV库.我按照这里的说明,但我得到错误

未找到名称"default"的配置

有什么不对?

我使用带有gradle 2.2.1的Android Studio 1.0.

android opencv gradle android-studio

136
推荐指数
5
解决办法
18万
查看次数

使用Android Studio的C++支持来构建非自由的OpenCV模块

背景

虽然早期版本的OpenCV(即2.4)允许Android项目利用SIFT功能,但将该功能分离opencv_contrib使得任务更加困难; 将OpenCV-3.x.x-android-sdk模块集成到项目中会使您无法使用该SIFT功能.

FeatureDetector.create(FeatureDetector.DYNAMIC_SIFT); // Fails
//OpenCV Error: Bad argument (Specified feature detector type is not supported.)
Run Code Online (Sandbox Code Playgroud)

使用外部工具

尽管像Gouhui Wang这样的技术描述了如何将OpenCV的非自由部分构建到Android项目中,但该过程需要外部工具.这个问题是关于如何获得相同的结果,而是利用Android Studio/InteliJ的强大功能和便利性.

在Android Studio中使用CMake

现代Android Studio版本具有有用的功能:

使用Android Studio 2.2及更高版本,您可以使用NDK将C和C++代码编译到本机库中,并使用IDE的集成构建系统Gradle将其打包到您的APK中.然后,您的Java代码可以通过Java Native Interface(JNI)调用本机库中的函数

正如这个有关使用C++支持构建OpenCV的stackoverflow问题和答案所示,可以将opencv4android的OpenCV 3.1(我怀疑其他版本)快速集成到新应用程序向导中生成的C++构建结构中.

为了让OpenCV的非自由部分完全在原生Android Studio构建过程中构建,需要采取哪些具体步骤

opencv cmake android-studio opencv4android

15
推荐指数
0
解决办法
480
查看次数

构建OpenCV for Android并将其与NDK一起使用

背景:我目前正在Android Studio上为Moverio BT 200增强现实眼镜开发应用程序.我正在使用OpenCV,特别是库的arUco模块.该模块必须与NDK一起使用.此外,它不在稳定版本上,所以我自己编译了库(使用本指南:https://zami0xzami.wordpress.com/2016/03/17/building-opencv-for-android-from-source/) .图书馆的建设进展顺利.之后,我做了一个android studio项目(customOCVtest).我在使用OpenCV与Android Studio和NDK时总是这样做,除了这次是使用自定义构建.我检查了库是否正确加载:

private static final String OCVdevTAG = "OCVmainAct";

static {
    System.loadLibrary("native-lib");
    if(!OpenCVLoader.initDebug()) {
        Log.d(OCVdevTAG, "OpenCV not loaded");
    } else {
        Log.d(OCVdevTAG, "OpenCV loaded");
    }
}
Run Code Online (Sandbox Code Playgroud)

我构建时确实加载了库.

现在出现了问题:当我尝试在我的本机代码中实际使用arUco模块时(这是我的native-lib.cpp):

#include <jni.h>
#include <string>
#include <opencv2/aruco.hpp>

extern "C" {
jstring
Java_com_jambonsama_customocvtest_MainActivity_stringFromJNI(
    JNIEnv *env,
    jobject /* this */) {
std::string hello = "Hello from C++";
cv::Ptr<cv::aruco::Dictionary> dict = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
cv::Mat marker;
cv::aruco::drawMarker(dict, 25, 200, marker, 1);
return env->NewStringUTF(hello.c_str());
}
}
Run Code Online (Sandbox Code Playgroud)

gradle sync工作,但我无法构建.我收到以下错误:

Error:FAILURE: Build …
Run Code Online (Sandbox Code Playgroud)

android opencv cross-compiling android-ndk

4
推荐指数
1
解决办法
1万
查看次数

将Android上的错误与OpenCV 3.4.0和NDK相关联

我试图将使用OpenCV用C++编写的现有计算机视觉代码移植到Android NDK.我按照此处提供的信息成功地为Java和NDK导入了OpenCV库版本3.4.0(使用官方预构建的Android软件包):Satck Overflow Answer - 在Android上对OpenCV进行CMake配置.

我能够使用Java和C++中的OpenCV功能编译和运行一些代码.但是,我遇到了与某些OpenCV函数相关的2个"未定义引用"链接错误:持久性JSON读取器和2D描述符匹配器.

以下是我收到的错误消息:

Build command failed.
Error while executing process D:\Librairies\Android_SDK\cmake\3.6.4111459\bin\cmake.exe with arguments {--build D:\Dev\Android\PageDetector\app\.externalNativeBuild\cmake\debug\x86_64 --target page-recognition-lib}
[1/1] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\recognition-lib.so
FAILED: cmd.exe /C "cd . && D:\Librairies\Android_SDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=x86_64-none-linux-android --gcc-toolchain=D:/Librairies/Android_SDK/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64 --sysroot=D:/Librairies/Android_SDK/ndk-bundle/sysroot -fPIC -isystem D:/Librairies/Android_SDK/ndk-bundle/sysroot/usr/include/x86_64-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -std=c++11 -frtti -fexceptions -std=gnu++11 -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot D:/Librairies/Android_SDK/ndk-bundle/platforms/android-21/arch-x86_64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -LD:/Librairies/Android_SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libpage-recognition-lib.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\recognition-lib.so.so [...] -llog …
Run Code Online (Sandbox Code Playgroud)

c++ android opencv gradle android-ndk

4
推荐指数
1
解决办法
3636
查看次数

通过Android Studio上的CMake将OpenCV添加到Native C代码中

我试图通过Cmake将Opencv包含在我的原生C代码中.我在网上做了一些研究并从网上下载了FindOpenCV.cmake文件并将其添加到我的android项目的app目录中.这也是CMakeLists.txt所在的位置.我使用本教程将OpenCV作为模块导入到我的Android Studio项目中:https://www.learn2crack.com/2016/03/setup-opencv-sdk-android-studio.html,当我运行时:

if(!OpenCVLoader.initDebug()){
   System.out.println("Opencv not loaded");
} else {
   System.out.println("Opencv loaded");
}
Run Code Online (Sandbox Code Playgroud)

我知道Opencv已经加载了.

但是,因为我正在尝试将OpenCV添加到我的本机代码而不是Java代码中,所以我认为我不能使用它.这是我现在拥有的CMakeLists:

# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.

cmake_minimum_required(VERSION 3.4.1)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} FindOpenCV.cmake)

# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android opencv cmake

3
推荐指数
1
解决办法
7248
查看次数