0

我想将 OpenCV 用于我目前正在开发的 Android 应用程序,用 Java 编写。

要设置 OpenCV,我完全按照本页和本页说明的步骤进行操作(尝试了两种解决方案均未成功)。当我让我的项目重建它时,它可以工作,但是当我让我的代码运行时,它在尝试执行以下操作时失败:

fdetector = FeatureDetector.create(FeatureDetector.SURF);

我得到的错误是,与上述问题页面java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.features2d.FeatureDetector.create_0:(I)J中的相同。我尝试了此页面上提出的所有解决方案,但没有一个对我有用。

我确实安装了 JNI,所以我想这不是问题。或者 m 我的设置如下:

-app
    |-libs (with my other app libraries, including javacv.jar)
    |-src
         |-main
               |-java (with my code)
               |-res
               |-jniLibs (with the .so files from the OpenCV's sdk\native\libs\x86)
         |-build.gradle
-libs
     |-opencv
             |-build
             |-jniLibs (with the same .so files as I was not sure where to put them)
             |-res
             |-src
             |-build.gradle

我的应用程序的 build.gradle 包含以下依赖项:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile fileTree(dir: 'libs', include: ['*.java'])
compile fileTree(dir: 'libs', include: ['*.so'])
compile 'com.android.support:appcompat-v7:21.0.2'
compile project(':libs:opencv')
}

而opencv的build.gradle包含以下sourceSets:

sourceSets {
main {
  manifest.srcFile 'AndroidManifest.xml'
  java.srcDirs = ['src']
  resources.srcDirs = ['src']
  res.srcDirs = ['res']
  aidl.srcDirs = ['src']
  jniLibs.srcDirs = ['jniLibs']
}
}

我的 settings.gradle 包含一个include ':libs:opencv'

我真的看不出我在哪里做错了,谁能帮我解决这个问题?

4

5 回答 5

1

Are you loading the OpenCV library in a JAVA static statement? If not, put this somewhere in your activity:

static { 
   System.loadLibrary("opencv_java"); //the name of the .so file, without the 'lib' prefix
}
于 2015-01-14T18:55:26.917 回答
1

以下是在 Android Studio 中使用 Android OpenCV sdk 的步骤。

  1. 从 [OpenCV.org][1]下载适用于 Android 的最新 OpenCV sdk 并解压缩 zip 文件。
  2. 将 OpenCV 导入 Android Studio,从File -> Import Module,选择解压后的 opencv 存档中的sdk/java文件夹。
  3. 更新导入的 OpenCV 模块下的 build.gradle 以更新 4 个字段以匹配您的项目 build.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion 和 4) targetSdkVersion。
  4. 通过Application -> Module Settings添加模块依赖项,然后选择Dependencies选项卡。单击底部的+图标,选择Module Dependency并选择导入的 OpenCV 模块。
  5. sdk/native下的libs文件夹复制到app/src/main下的 Android Studio 中。
  6. 在 Android Studio 中,将复制的libs目录重命名为jniLibs,我们就完成了。

第 (6) 步是因为 Android Studio 需要本地库app/src/main/jniLibs而不是旧libs文件夹。对于那些刚接触 Android OpenCV 的人,不要错过以下步骤

  • 包括static{ System.loadLibrary("opencv_java"); }
  • 对于第 (5) 步,如果您忽略任何平台库(如 x86),请确保您的设备/模拟器不在该平台上。
于 2015-01-15T15:57:00.417 回答
1
于 2015-01-14T21:53:41.297 回答
0

感谢大家的帮助,现在我已经解决了!

实际上我所做的是按照 G3M 在https://www.youtube.com/watch?v=0fEtrekNcOo的视频中的说明为我的项目添加 ndk 功能,即将以下行添加到我的应用程序的 local.properties:

ndk.dir=D\:\\AndroidSDK\\ndk

然后,按照 Kiran 的建议,我完成了此设置说明中的步骤

最后,我能够进行 bonnyz 建议的静态调用以获取“opencv_java”库:

static { 
    System.loadLibrary("opencv_java"); //the name of the .so file, without the 'lib' prefix
}
于 2015-01-15T16:00:34.327 回答
0

经过长时间的研究,我用下面给出的代码修复了它:

sourceSets.main {
    jni.srcDirs = []
    jniLibs.srcDir 'src/main/libs'
}
于 2016-04-26T07:04:58.070 回答