Android平台下OpenCV移植与使用---基于C/C++

本文介绍了如何在Android平台上移植和使用OpenCV,包括创建测试工程、拷贝OpenCV SDK、新建jni目录、编写Java本地接口、生成JNI头文件、编写编译规则、编译生成SO库、调用库验证以及图像处理类的编写。通过实例展示了OpenCV在Android上的基本应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在《 Android Studio增加NDK代码编译支持--Mac环境》和《 Mac平台下Opencv开发环境搭建》两篇文章中,介绍了如何使用NDK环境和Opencv环境搭建与测试使用,现在,在PC端对图像处理算法测试没问题后,该在移动端进行功能移植了,ios平台的很简单,直接把类库拷进工程就行了,android的稍微麻烦点,这里就以android平台为例说明移植步骤。

  为了更好的模块移植,这里使用Android源码的make文件写法:*.mk,Android源码是一个很大的工程,它的编译采用一个大的mk文件,通过脚本文件的配置来自定义编译的,在build/core/下面的Android.mk文件就是总的编译文件入口:

  

   这里写的opencv安卓模块也使用mk文件写法来编译so库。这里新建了一个测试工程,可以在GitHub上download或fork来查看源码: https://github.com/linjk/TestOpenCV

    下面开始移植步骤:

   1. 新建测试工程OpenCVTest:

    

    2. 拷贝下载的opencv的android平台的开发包,这里下载3.1.0版本的:

     

      这里把sdk目录下的native目录拷贝到工程根目录,这个目录下是c/c++语法的,java目录是已封装好的一些java接口,按需选择吧,为了更好的算法移植而不用每次改写,这里选择native库,复制后工程结构如下:

      

    3. 新建jni目录,用于编写本地c++代码:

      在src目录单击右键,按下图操作:

      

      结果如下:

      

    4. 编写java类的本地接口声明,用于给java层调用:

      这里声明一个很简单的opencv本地方法,用于把一副图像编程灰度图像,当然,这个效果用安卓的图像矩阵来处理就行了,但是,复杂一点的功能,如边缘检测、身份证识别就要借助opencv来弄了,这里仅做功能测试:

      

    5. 生成本地方法桥接头文件:

      命令行进入src/main/java路径,然后执行命令: javah -jni cn.linjk.jniBridge.OpenCVUtils, -jni参数后面参数格式是:包名+类名,结果如下:

        

        我们把这个文件移动到jni目录下,并新建一个同名的cpp类cn_linjk_jniBridge_OpenCVUtils.cpp:

    6. 由于之前使用了android studio生成的jni目录,因此,编译

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值