在 Android Studio 中为 C++ 设置 OpenCV(4.6.0)

要创建具有 OpenCV 库支持的新原生 Android 应用程序,你应该在你的机器上重现以下步骤:

  1. 从(https://opencv.org/releases/)下载最新的 OpenCV SDK :

在 Android Studio 中为 C++ 设置 OpenCV(4.6.0)_第1张图片

下载最新的 OpenCV — 4.6.0 用于 Android 开发

笔者在撰写本文时,最新的 OpenCV 版本是 4.6.0。

  1. 解压 opencv-4.6.0-android-sdk.zip

  2. 创建一个新的Android Native应用程序:

创建一个新的 Android Native App 项目

  1. 使用以下命令将 OpenCV SDK 作为新模块导入:

文件 → 新建 → 导入模块... → (找到路径OpenCV-android-sdk\sdk) → 完成

将 OpenCV-SDK 作为新模块导入

4.1(可选)在导入之后,你可能会收到如下错误:

在 Android Studio 中为 C++ 设置 OpenCV(4.6.0)_第2张图片

未找到 ID 为“kotlin-android”的插件

修复此问题,你可以在(https://github.com/react-native-webview/react-native-webview/issues/1407#issuecomment-634436481)中找到,或者只需将下一行添加到android/build.gradle:opencv

buildscript {
    ext {
        kotlinVersion = "1.3.72"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
    }
}
  1. 在build.gradle:app和build.gradle:opencv中设置相同的SDK版本。例如:

android {
    compileSdkVersion 32

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 26
...
  1. 将 OpenCV-SDK 作为模块依赖添加到项目中:

文件→项目结构...→依赖项→选择应用程序→+→模块依赖项→OpenCV4→确定→确定

在 Android Studio 中为 C++ 设置 OpenCV(4.6.0)_第3张图片

  1. 将 OpenCV 依赖添加到 CMakeLists.txt(编辑模板):

cmake_minimum_required(VERSION 3.18.1)
include_directories(H:\\OpenCV-android-sdk\\sdk\\native\\jni\\include)
add_library( lib_opencv SHARED IMPORTED )
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION H:\\OpenCV-android-sdk\\sdk\\native\\libs\\${ANDROID_ABI}\\libopencv_java4.so)

并添加libopencv到 target_link_libraries:

target_link_libraries( # Specifies the target library.
        cppdemoproject1
        lib_opencv
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
  1. 通过向 OpenCV 库添加一些本机调用来检查依赖项是否正常工作。

8.1 在 nativ-lib.cpp 中添加原生函数:

#include 

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_validate(JNIEnv *env, jobject thiz, jlong mad_addr_gr,jlong mat_addr_rgba) {
    cv::Rect();
    cv::Mat();
    std::string hello2="hello from validate";
    return env->NewStringUTF(hello2.c_str());
    // TODO: implement validate()
}

8.2 在 MainActivity.java 中添加 native 函数调用和定义:

if (OpenCVLoader.initDebug()) {
    tv.setText(tv.getText()+"\n OPENCV LOADED SUCCESSFULLY");
    tv.setText(tv.getText()+"\n"+validate(500,500));
} else {
    Log.d(TAG, "OPENCV DİD NOT LOAD");
}

定义原生函数:

public native String validate(long madAddrGr,long matAddrRgba);
  1. 构建并运行你的应用程序并检查结果:

在 Android Studio 中为 C++ 设置 OpenCV(4.6.0)_第4张图片

你应该看到这个视图,带有来自 OpenCV 方法的字符串

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

在 Android Studio 中为 C++ 设置 OpenCV(4.6.0)_第5张图片

你可能感兴趣的:(android,java,android,studio,gradle,jni)