【工具相关】Android Studio使用Opencv NDK学习笔记

Android Studio使用OpenCV NDK学习笔记

近期在学习将深度学习模型移植到移动端设备上运行,由于组内前期工作中涉及到在Android编程中调用OpenCV库的实现方法,所以针对这方面进行了学习了解,以下为学习笔记,主要包括可调用OpenCV库的Android工程创建过程以及简单的使用。

1.Opencv库的调用

在Android编程中,如果工程对算法有较高要求时,我们经常会使用NDK调用C++实现的算法代码,这样既方便,也提高了我们的代码效率。下面介绍利用NDK在Android Studio里调用OpenCV库的步骤。

第一步:下载OpenCV SDK

OpenCV官方下载地址
打开官方下载地址,我们可以选择对应的OpenCV版本,如图是当前最新的4.5.0版本,然后我们选择Android进行下载。
下载页面
下载完成以后,解压,将得到如下图所示的文件夹。
其中samples文件夹里包含了一些官方示例,我们主要利用sdk文件夹里的内容。
OpenCV-android-sdk

第二步:创建Android工程

在Android Studio中新建工程,选择Native C++模版进行创建。
在这里插入图片描述
命名工程,其他选项保持默认即可。
在这里插入图片描述
点击Finish完成创建。
在这里插入图片描述

第三步:在新建工程中引入OpenCV库(关键)

在第二步新建工程并完成编译后,我们可以看到如下图所示的文件目录(需要在左上角将Android按钮选择为Project视角)。
在这里插入图片描述
我们主要需要改动cpp文件夹下的CMakeList.txt文件和app文件夹下的build.gradle文件。
首先,我们对CMakeList.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.4.1)

#设置OpenCV库基地址,需要根据自己的情况进行修改
set(pathToOpenCv /Users/Peter/AndroidStudioProjects/OpenCV-android-sdk/)

#支持-std=gnu++11
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")


#配置加载native依赖
include_directories(${pathToOpenCv}/sdk/native/jni/include)

#动态方式加载
add_library(lib_opencv STATIC IMPORTED )

#引入libopencv_java3.so文件,需要自行修改对应的文件地址
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION /Users/Peter/AndroidStudioProjects/OpencvDemo/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so )
# 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).
        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)

# 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

        # Links the target library to the log library
        # included in the NDK.
        # 链接opencv库
        ${log-lib} android -ljnigraphics lib_opencv)

接下来对build.gradle文件进行修改,在对应位置添加如下代码。
在这里插入图片描述
完成对文件的修改后,我们需要把OpenCV的库文件复制到我们的工程中。首先打开第一步在我们的工程目录app->src->main文件夹下创建名为jniLibs的文件夹(注意,文件夹名不能修改)。
然后打开第一步解压得到的OpenCV-android-sdk文件夹,将sdk->native->libs文件夹下的内容拷贝到新建的jniLibs文件夹下。
在这里插入图片描述
在这里插入图片描述
至此就完成了OpenCV库的引入,可以通过build工程查看效果,没有报错即为成功。

关于简单的应用,推荐大家到Bilibili参考以下地址的视频:
简单应用视频教程

具体代码实现参考Github

本文仅作为学习笔记交流分享用。由于本人水平有限,文章可能出现纰漏,欢迎大家进行交流指正。谢谢阅读!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值