静态初始化

根据这种方法,所有 OpenCV 二进制文件都包含在你的应用程序包中。它主要用于开发和调试目的。对于生产代码,不推荐使用此方法,建议使用异步初始化。

如果你的应用程序项目没有 JNI 部分,只需将相应的 OpenCV 本机库从 OpenCV-3.1.0-android-sdk/sdk/native/libs 复制到项目目录到文件夹 app/src/main/jniLibs

如果应用程序项目带有 JNI 部分,而不是手动库复制,则需要修改 Android.mk 文件:在 include $(CLEAR_VARS) 之后和 include path_to_OpenCV-3.1.0-android-sdk/sdk/native/jni/OpenCV.mk 之前添加以下两个代码行:

OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on

结果应如下所示:

include $(CLEAR_VARS)
# OpenCV
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include ../../sdk/native/jni/OpenCV.mk

之后,在 JNI 构建期间,OpenCV 库将被复制到你的应用程序 jniLibs 文件夹中。

在你的应用程序中启用 OpenCV 的最后一步是在调用 OpenCV API 之前的 Java 初始化代码。例如,它可以在 Activity 类的静态部分中完成:

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}

如果你的应用程序包含其他依赖于 OpenCV 的本机库,则应在 OpenCV 初始化后加载它们:

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    } else {
        System.loadLibrary("my_jni_lib1");
        System.loadLibrary("my_jni_lib2");
    }
}

注意: 对于生产代码,不推荐使用 initDebug() 方法。它仅用于实验和本地开发目的。如果要使用异步初始化发布应用程序使用方法。