如何在 Android Studio 中导入 OpenCV 4.5

How to import OpenCV 4.5 in Android Studio

事实上,这个问题仍然偶尔会得到新的赞成票,这让我觉得我不是唯一遇到这种情况的人,所以我决定写一个逐步解释什么对我有用希望其他人将来会发现它有用。一切都基于this video,但我认为最好在这里写一个适当的指南,以防它被删除。

如果您正在寻求有关 OpenCV 3.4 的帮助,this 是我在尝试 4.5 版之前关注的内容。

这是我目前在 Android Studio 4.1.3 上使用 OpenCV 4.5.2 的完整程序。

  1. 在您的项目中,单击 File > New > Import Module... 和 select OpenCV 下载中的 /sdk 目录。给它一个有意义的名字并等待过程完成:你 selected 的目录应该已经被复制到默认 /app 目录所在的项目的根目录中;
  2. 打开项目结构(例如通过单击 File > Project Structure...),然后转到 Dependencies(在左侧),单击 app+ Declared Dependencies 选项卡中的图标(不是 Modules 选项卡中的图标);
  3. 单击 Module Dependency 和 select 您之前导入的 OpenCV SDK 的复选框。您现在应该在列表中看到它和其他依赖项,因此单击 ApplyOK 退出项目结构;
  4. 打开你的应用程序模块的 build.gradle 文件,复制 compileSdkVersionminSdkVersiontargetSdkVersion 的值,然后将它们粘贴到 build.gradle替换默认模块的 OpenCV 模块文件,以便它们完全匹配。您还可以将 sourceCompatibilitytargetCompatibility 字段更新为 JavaVersion.VERSION_1_8;
  5. 最后,将您的项目与 Gradle 个文件同步。

要检查它是否有效,请将此代码段添加到您的代码中,例如 MainActivity:

if (OpenCVLoader.initDebug()) {
    Log.d("myTag", "OpenCV loaded")
}

我在 android studio 中成功导入了 opencv 4.5.2。这并不难。关键是为 CMake 提供正确的 OpenCV_DIR 路径来安装 OpenCV。

下载SDKhttps://opencv.org/releases/

通过文件 > 新建 > 导入模块导入模块…

在setting.gradle

中添加OpenCV模块
include "opencv"
project(":opencv").projectDir = file("sdk")

在应用程序 build.gradle 中,在下面添加 OpenCV_DIR cmake 参数 android > defaultConfig > externalNativeBuild > cmake

arguments "-DOpenCV_DIR=" + file('../sdk').absolutePath + "/native/jni",
        "-DANDROID_TOOLCHAIN=clang",
        "-DANDROID_STL=c++_shared"

在应用中添加OpenCV模块依赖build.gradle

implementation project(':opencv')

Link 应用程序 cmake 中的 OpenCV 库。

set(ANDROID_OPENCV_COMPONENTS "opencv_java" CACHE STRING "")
message(STATUS "ANDROID_ABI=${ANDROID_ABI}")
find_package(OpenCV REQUIRED COMPONENTS ${ANDROID_OPENCV_COMPONENTS})
......
target_link_libraries(${PROJECT_NAME} ${ANDROID_OPENCV_COMPONENTS})

opencv 4.5.3 版的 sdk 目录是“opencv/sources/modules/java/android_sdk”。在 上完成每个步骤后,我遇到了一些错误,我通过评论或删除 在 opencv 模块的 build.gradle 中找到的 'arguments "-DANDROID_STL=@ANDROID_STL@"' 行。

    externalNativeBuild {
         cmake {
//          arguments "-DANDROID_STL=@ANDROID_STL@"
            targets "opencv_jni_shared"
        }
    }