AndroidStudio 使用 OpenCV 的三种方式

📅 2026/7/28 15:35:19
AndroidStudio 使用 OpenCV 的三种方式
转自https://cloud.tencent.com/developer/news/48990http://kuaibao.qq.com/s/20171214G0A8H400?refercp_1026要在 Android 上使用 OpenCV总体上来说有三种方法使用 OpenCV Manager OpenCV Android SDK使用 OpenCV Android SDK OpenCV 动态库使用 OpenCV 动态库 JNI开发环境: Android Studio3.0 Ubuntu 16.04 LTS使用 OpenCV Manager OpenCV Android SDK这种方法最简单但是也对用户最不友好因为需要多安装 OpenCV Manager 这个APK适合在快速验证功能的时候使用。其实这种方法的原理就是利用 Android 的 Service 来进行跨进程通信主要流程如下具体操作步骤如下新建 Android 工程下载 OpenCV-Android-SDK下载地址: https://opencv.org/releases.html点击 File - new - Import Module, 选中 OpenCV-Android-SDK/sdk/java 文件夹,点击确定就会自动识别处模块如下图所示导入完成后会在工程目录下发现 OpenCV 的库settings.gradle 文件也会相应改变点击 File - Project Structure在 Modules 下点击 依赖 OpenCV 的模块比如 app 再点击右边的 Dependencies。点击右侧加号选第三个 Module dependency 后选择 openCVLibrary310 后点击完成。完成后会发现 app目录下的 build.gradle 中的 dependencies 增加了 oepncv 的依赖。到这里我们就可以在程序里面使用 OpenCV 的类了。由于 OpenCV 库的版本一般情况下和你的工程的版本号不同所以需要把 OpenCV 库目录下的 build.gradle 中的编译版本构建版本等参数设置成和工程一样。根据手机安装对应的 OpenCV Manager apkapk 在 OpenCV-Android-SDK/apk 目录下。可以将 apk 复制到手机内存卡里安装也可以将手机连上电脑然后通过命令行安装安装命令adb install [OpenCV_xxx.apk]在使用 OpenCV 功能前 使用OpenCVLoader.initAsync(String Version, Context AppContext,LoaderCallbackInterface Callback) 这个方法进行初始化初始化成功之后就可以正常使用 OpenCV 库了。使用 OpenCV Android SDK OpenCV 动态库第一种方法有点就是简单缺点就是必须要安装 OpenCV Manager apk。要用户同时安装两个 apk 并不太现实所以第一种方法不适合在实际项目中使用。而采用 OpenCV Android SDK OpenCV 动态库 的方法就可以避免这个问题。主要步骤1-5点都和之前一样新建 Android 工程下载 OpenCV-Android-SDK下载地址: https://opencv.org/releases.html点击 File - new - Import Module, 选中 OpenCV-Android-SDK/sdk/java 文件夹,点击确定就会自动识别处模块如下图所示导入完成后会在工程目录下发现 OpenCV 的库settings.gradle 文件也会相应改变点击 File - Project Structure在 Modules 下点击 依赖 OpenCV 的模块比如 app 再点击右边的 Dependencies。点击右侧加号选第三个 Module dependency 后选择 openCVLibrary310 后点击完成。完成后会发现 app目录下的 build.gradle 中的 dependencies 增加了 oepncv 的依赖。到这里我们就可以在程序里面使用 OpenCV 的类了。由于 OpenCV 库的版本一般情况下和你的工程的版本号不同所以需要把 OpenCV 库目录下的 build.gradle 中的编译版本构建版本等参数设置成和工程一样将 OpenCV-Android-SDK/sdk/native/libs 目录下全部内容复制到 工程目录/app/src/main/jniLibs 目录下这里可以针对特定的手机做裁剪为了方便可以全部复制在使用 OpenCV 功能前 使用下面代码加载 OpenCV 动态库然后使用进行初始化。初始化成功之后就可以正常使用 OpenCV 进行开发了。使用 OpenCV 动态库 JNI第二种方法由于不需要安装 OpenCV Manager同时又是使用 OpenCV Android SDK 在 Java 层进行开发故开发速度非常快十分适合一般的引用场景。但该方法也有几个缺点使用 OpenCV Android SDK 会增大 APK 的体积。由于在 Java 层进行开发在某些场景下会导致运行效率不高。因此引出了第三中方法。该方法使用 OpenCV 动态库 JNI 的方式进行开发适合在对计算效率要求比较高的场景下使用。但由于采用了 JNIJava Native Interface技术开发的难度也是最大的。主要步骤新建 Android 工程下载 OpenCV-Android-SDK下载地址: https://opencv.org/releases.html下载相关工具3.1 在打开的项目中从菜单栏选择 Tools - Android - SDK Manager。3.2 点击 SDK Tools 标签。3.3 选中 LLDB、CMake 和 NDK 旁的复选框如下图所示。将 OpenCV-Android-SDK/sdk/native/libs 目录下全部内容复制到 工程目录/app/src/main/jniLibs 目录下这里可以针对特定的手机做裁剪为了方便可以全部复制创建新的原生源文件要在应用模块的主源代码集中创建一个包含新建原生源文件的 cpp/ 目录并新建 source 和 include 的子目录。在 source 目录下新建源文件 native-lib.cpp复制头文件将 OpenCV-Android-SDK/sdk/native/jni/include 目录下全部内容复制到 工程目录/app/src/main/cpp/include 目录下编辑 CMakeLists.txt在模块根目录下新建文件 CMakeLists.txt并添加以下内容# 指定 cmake 的最小版本确保能使用某些新特性构建项目cmake_minimum_required(VERSION 3.4.1)# 输出详细信息set(CMAKE_VERBOSE_MAKEFILE on)# 设置库目录set(LIBRARY_DIRS “$/src/main/jniLibs”)# 包含头文件目录include_directories(src/main/cpp/include)# 添加 opencv 的动态库add_library( libopencv_java3 SHARED IMPORTED )# 指定库路径set_target_properties( libopencv_java3 IMPORTED_LOCATION “/libopencv_java3.so” )# 设置源文件目录aux_source_directory(src/main/cpp/source SOURCE_DIR)add_library( native-lib SHARED $ )find_library( log-lib log )target_link_libraries( native-lib libopencv_java3 $ )修改 build.gradle在模块的 build.gradle 内的 android 闭包内添加编写 JNI 接口和 C 代码。上面 CMakeLists.txt 的作用是将 opencv 的动态库和 native-lib.cpp 链接起来生成新的动态库。到目前位置我们已经能够在 native-lib.cpp 内使用 C 编写 OpenCV 程序了。接下来的步骤为由于这部分是普通的 JNI 使用不属于 opencv 的内容所以不在这里展开了。在 Java 层编写 native 方法使用 javah -jni 生成本地接口在 C 层实现接口在 Java 层调用 native 方法。总结到这里就介绍了 Android 使用 OepnCV 的三种方式。其中我个人推荐第二种方法。关于第三种方法我采用的是 cmake 构建虽然也可以采用 ndk 的方式但是我个人推荐的是 cmake因为 cmake 更加简单应用范围也更广泛谷歌目前推荐的构建方式也是 cmake。关于三种方法的 Demo我上传到了 github上请自行下载。https://github.com/dongxiawu/OpencvDemo参考资料[1] https://www.cnblogs.com/yunfang/p/6149831.html[2] https://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html[3] https://docs.opencv.org/2.4.13.4/platforms/android/service/doc/UseCases.html#first-application-start[4] https://developer.android.google.cn/studio/projects/add-native-code.html?hlzh-cn[5] https://cmake.org/cmake/help/v3.10/发表于: 2017-12-14原文链接http://kuaibao.qq.com/s/20171214G0A8H400?refercp_1026腾讯「云社区」是腾讯内容开放平台帐号企鹅号传播渠道之一根据《腾讯内容开放平台服务协议》转载发布内容。