如何在Android Studio中导入OpenCV 4.5

15

这个问题不时地得到新的赞让我想到我不是唯一处于这种情况下的人,因此我决定撰写一个逐步说明的步骤,希望其他人在未来能够找到它有用。所有内容都基于这个视频,但我认为最好在这里编写一个正确的指南,以防它被删除。

如果您需要帮助OpenCV 3.4,这个视频是我在尝试版本4.5之前要遵循的。


你看到/关注了吗:https://forum.opencv.org/t/run-samples-of-open-cv-in-android-studio/453/7 - Morrison Chang
@MorrisonChang 那似乎更注重于从源代码编译库,而我只需要导入发布版到Android Studio以使用自动生成的Java API。 - rdxdkr
1
我也遇到了问题,但最终我成功解决了,所以我在这个答案中写下了成功的步骤(请注意,由于它是针对react-native的,可能有一些不必要的步骤)。https://stackoverflow.com/questions/59800761/how-can-i-import-opencv-library-to-react-native-project/64500728#64500728 - kavko
3个回答

16
这是我目前在Android Studio 4.1.3上使用OpenCV 4.5.2的完整操作步骤。
在您的项目中,点击文件 > 新建 > 导入模块...,然后选择您下载的OpenCV文件夹中的/sdk目录。给它一个有意义的名称,等待过程完成:您选择的目录应该已经复制到项目根目录中,与默认的/app目录处于同一级别;
打开项目结构(例如,点击文件 > 项目结构...),然后进入依赖项(在左侧),点击app,然后点击已声明的依赖项选项卡中的+图标(不是模块选项卡中的那个);
点击模块依赖项,然后选择您之前导入的OpenCV SDK的复选框。现在您应该在其他依赖项列表中看到它,所以点击应用确定退出项目结构;
打开您的应用模块的build.gradle文件,复制compileSdkVersionminSdkVersiontargetSdkVersion的值,然后将它们粘贴到OpenCV模块的build.gradle文件中,替换默认值,使它们完全匹配。您还可以将sourceCompatibilitytargetCompatibility字段更新为JavaVersion.VERSION_1_8
最后,与Gradle文件同步您的项目。
要检查它是否有效,请将此片段添加到您的代码中,例如在MainActivity中:
if (OpenCVLoader.initDebug()) {
    Log.d("myTag", "OpenCV loaded")
}

编辑: 在4.8.0版本的OpenCV中有一个小的添加。 打开org.opencv的app级别的build.gradle文件,在android块的末尾添加以下代码块:
buildFeatures {
    aidl = true
    buildConfig = true
}

2
这个答案在使用Open CV 4.5.5和Android Studio Chipmunk | 2021.2.1时仍然准确。 - Ben Bloodworth
@BenBloodworth 感谢您的尝试。不知道您是否能指出一些关于如何有效地使用OpenCV来实际完成一些非平凡任务的最新资源?由于我找不到足够好的API使用文档,所以我不得不完全放弃它。我改用了Google ML Kit,它运行得非常流畅,但显然它不是开源的。 - rdxdkr

2

OpenCV版本4.5.3的sdk目录为"opencv/sources/modules/java/android_sdk"。在执行https://dev59.com/lFEG5IYBdhLWcg3wdujF#65571017中的每个步骤后,我遇到了一些错误,通过注释或删除'arguments "-DANDROID_STL=@ANDROID_STL@"'行(该行位于opencv模块的build.gradle文件中)来解决了这些错误。

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

0

我成功地在Android Studio中导入了OpenCV 4.5.2。这并不是很困难。关键是为CMake提供正确的OpenCV_DIR路径以安装OpenCV。

下载SDK https://opencv.org/releases/

通过文件 > 新建 > 导入模块来导入模块...

在setting.gradle中添加OpenCV模块

include "opencv"
project(":opencv").projectDir = file("sdk")

在应用程序的build.gradle文件中,在android > defaultConfig > externalNativeBuild > cmake下添加OpenCV_DIR cmake参数。
arguments "-DOpenCV_DIR=" + file('../sdk').absolutePath + "/native/jni",
        "-DANDROID_TOOLCHAIN=clang",
        "-DANDROID_STL=c++_shared"

在应用程序的 build.gradle 文件中添加 OpenCV 模块依赖。
implementation project(':opencv')

在你的应用程序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})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接