【问题标题】:How to add OpenCV lib to AS3.1.2 and NDK 17.0如何将 OpenCV 库添加到 AS3.1.2 和 NDK 17.0
【发布时间】:2018-10-30 05:20:54
【问题描述】:

我需要在 Android Studio 3.1.2 中使用 OpenCV。我在 2018 年 5 月 20 日拥有此 IDE 和 NDK (17.0.4754217) 的最新版本。

我读到this post 谈论它,并谈到了 NDK 版本 16 的问题,但事实并非如此。

大多数指南都是针对旧版本的 Android(我看到指南谈论用于 Android 开发的 Eclipse IDE),但没有最新版本或最接近的版本,这是一个问题,因为最新版本的 AS 导致许多旧项目或制作方式存在错误,因此这些指南已过时。

可能是由于我不知道如何使用 NDK 和 CMake 造成的问题,所以如果有人知道如何或尝试过这样做,我将不胜感激,告诉我如何将 OpenCV 添加到 Android 3.1.2,也许这篇文章对其他用户对未来版本的 NDK 和 AS 有帮助。

太多了。

【问题讨论】:

    标签: android android-studio opencv android-ndk opencv4android


    【解决方案1】:

    1.确保您的 Android SDK 是最新的,并安装了 NDK

    2. 从 OpenCV.org 下载适用于 Android 的最新 OpenCV SDK 并解压缩 zip 文件。

    3.创建一个新的 Android Studio 项目

    • 检查包含 C++ 支持
    • 选择空活动
    • 在 C++ 支持中,您可以检查 -fexceptions 和 -frtti

    4.导入OpenCV库模块

    • 新 -> 导入模块
    • 选择 YOUR_OPENCV_SDK/sdk/java 文件夹
    • unckeck 替换 jar,unckeck 替换 lib,unckeck 创建 gradle-style

    5. 设置 OpenCV 库模块以适合您的 SDK

    app/build.gradle

    opencv/build.gradle

    编辑 openCVLibrary/build.gradle 以匹配您的 app/build.gradle 例如:

    compileSdkVersion 27
    defaultConfig {
    minSdkVersion 19
    targetSdkVersion 27
    }
    

    6.在你的应用模块中添加OpenCV模块依赖

    文件 -> 项目结构 -> 模块应用程序 -> 依赖项选项卡 -> 新建模块依赖项 -> 选择 OpenCV 库模块

    7. 右键单击​​ app/src/main 并单击 更改文件夹位置 创建一个 jni 文件夹> 将文件夹从 jni 重命名为 jniLibs

    之后的框
    • 第一步

    • 第二步

    • 第三步

    8. 复制您下载的 opencv 目录 YOUR_OPENCV_SDK/sdk/native/libs 中的所有文件并粘贴到 jniLibs 文件夹

    • 第一步

    • 第二步

    9.设置app build.gradle

    • 添加 abiFilters

      externalNativeBuild {
      cmake {
          cppFlags "-frtti -fexceptions"
          abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
         }
      }
      

    10.配置CMakeLists.txt文件

    • 复制这三行并粘贴到cmake_minimum_required

      之后
      include_directories(YOUR_OPENCV_SDK/sdk/native/jni/include)
      add_library( lib_opencv SHARED IMPORTED )
      set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)
      

    • 转到 CMakeLists.txt 的末尾并将 lib_opencv 写入 target_link_libraries 列表

    现在一切都完成了,享受使用 opencv 编码...

    【讨论】:

    • 非常感谢!我对你的回答有几个疑问。我在第 7 步迷路了。你说“单击更改文件夹框”是什么意思?我有点困惑的另一件事是第 10 点,当您说我必须添加“include_directories (YOUR_OPENCV_SDK / sdk / native / jni / include)”时。我想为此我必须将 OpenCV 的 ZIP 文件夹移动到项目文件夹中,我错了吗?
    • 无论如何,首先,当我尝试同步 gradle 时出现此错误:在输入 com.android.build.gradle.internal.dsl.CmakeOptions。
    • “单击更改文件夹框”我的意思是说,当您创建一个 jni 文件夹时,会出现一个窗口,其中包含一个复选框,上面写着**“更改文件夹位置”**,您必须选中该框之后将文件夹名称从 jni 更改为 jniLibs。
    • 并且在第 10 步中,您不必将 opencv 移动到项目位置。只需将这三行复制粘贴到您的 cmake 中的“最低要求 cmake”行之后。
    • 按照现在描述的相同顺序执行所有步骤,希望您不会收到任何错误。但如果仍有任何错误,我很乐意为您提供帮助。
    【解决方案2】:

    假设您使用的是 Android Studio,那么最初的 NDK 集成现在比以前容易得多。

    您可以简单地在 Android Studio 中创建一个新项目,指定您希望在其中支持 NDK,然后添加一个基本活动。

    向这个项目添加 OpenCV NDK(即 C++ 支持)仍然很棘手 - 正如您所说,Android OpenCV 页面上的大多数指南和说明目前都是基于 eclipse 的。我使用 NDK 在 Android Studio 上浏览了 OpenCv 上的许多博客、指南等,最近(本周)对我有用并且似乎正在保持最新状态的是这里的答案:

    我鼓励您尝试这种方法并分享您在 cmets 中遇到的任何问题,以便更新并保持最新状态,因为 Android 和 OpenCV 中的变化意味着拥有良好支持的参考说明非常重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-08
      • 2018-06-27
      • 2015-04-26
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      相关资源
      最近更新 更多