OpenCV android sdk配置OpenCV android NDK开发实例

本文介绍了在Android应用中集成OpenCV进行图像处理的方法。推荐使用NDK开发以提升性能,详细阐述了集成步骤,包括下载最新OpenCV SDK、新建支持NDK的项目、导入.h文件和.so动态库、进行CMakeLists.txt配置及修改build文件等。

OpenCV简介

OpenCV,全称Open Source Computer VisionLibrary,是基于C/C++编写的,是BSD开源许可的计算机视觉开发框架,其开源协议允许在学术研究与商业应用开发中免费使用它。OpenCV支持Windows、Linux、Mac OS、iOS与Android操作系统上的应用开发。

下载
- 官网[OpenCV官网](https://opencv.org/releases/)Android最新版本SDK(我自己再用的是4.5.0)
- 选择OpenCV对应版本下的Android平台

SDK概述
SDK目录结构如下:

 

OpenCV-android-sdk
|_ samples
|_ sdk
|     |_ etc
|    |_ java
|    |_ libcxx_helper
|    |_ native
|          |_ 3rdparty
|          |_ jni
|               |_ abi-arm64-v8a
|               |_ abi-armeabi-v7a
|               |_ abi-x86
|               |_ abi-x86_64
|               |_ include
|          |_ libs
|               |_ arm64-v8a
|               |_ armeabi-v7a
|               |_ x86
|               |_ x86_64
|          |_ staticlibs
|               |_ arm64-v8a
|               |_ armeabi-v7a
|               |_ x86
|               |_ x86_64
|
|_ LICENSE
|_ README.android

 

目录文件
samplesOpenCV运行案例
sdkOpenCV API以及依赖库
sdk/etcHaar和LBP级联分类器
sdk/javaOpenCV Java API
sdk/libcxx_helperbring libc++_shared.so into packages
sdk/nativeOpenCV 静态库、动态库以及JNI文件

集成OpenCV SDK

在Android应用中调用OpenCV进行图像处理的方法有很多种,考虑到性能问题,本人推荐使用NDK进行开发,毕竟C/C++要比Java性能好的多。

一、集成OpenCV


OpenCV集成还是很简单的,不需要我们自己去交差编译生成动/静态库,解压后的文件已经包含了动态库。一般套路都是这样,下载库、导入.h和动/静态库、配置CmakeList。详细步骤:

1.下载最新OpenCV SDK
2.新建项目


新建工程一定要勾选“Include C++ support”,这样新建的Android工程会直接支持NDK开发,避免各种配置问题,如果提示没有NDK,请下载NDK,并在工程“Project Structure”中导入即可:
新建工程勾选了“Include C++ support”,就已经支持NDK开发了(即native-lib),我们需要做的是,根据自己项目需要,增加JNI接口。


3.导入.h文件和.so动态库


 

 

把OpenCV SDK的include文件复制到cpp文件夹下,把opencv的动态库引入jniLibs文件下


4.CMakeLists.txt配置

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.10.2)

# Declares and names the project.

project("learning")

set(libs "${CMAKE_SOURCE_DIR}/src/main/jnilibs")
#导入libopencv_java4库文件
add_library(libopencv SHARED IMPORTED)
set_target_properties(libopencv PROPERTIES
        IMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_java4.so")
#导入头文件
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/include)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
        native-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        src/main/cpp/native-lib.cpp)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

find_library( # Sets the name of the path variable.
        jnigraphics-lib
        jnigraphics)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
        native-lib
        #添加opencv_java4
        libopencv
        ${jnigraphics-lib}
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

5.修改build文件

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        ····

        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
                arguments "-DANDROID_STL=c++_shared"
                //生成.so库的目标平台
                abiFilters 'armeabi-v7a', 'arm64-v8a'
            }
        }
    }

    ····
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"// CMakeLists.txt路径
            version "3.10.2"//CMakeLists.txt版本
        }
    }


    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}



 clean一下,并重新编译,这样NDK就支持OpenCV开发了。

 PS:到这里,只是表示NDK C++层可以支持OpenCV开发了,要是想在Java层中,直接使用OpenCV的Java包,还需要导入“OpenCV-android-sdk”的Java,方法是可以参考:http://blog.youkuaiyun.com/u010097644/article/details/56849758
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值