第1章 OpenCV Android 开发框架

96
视频音频小白
0.3 2019.03.19 08:41 字数 1884

第一节 OpenCV介绍

  • 本章将主 要介绍 OpenCV 的历史与发展、各个模块的功能说明 、 如何使用 Android Studio IDE 来 建立 OpenCV 的开发环境,以及如何整合配置并成功运行和调用 OpenCV 中的函数实现 一个最简单的 OpenCV程序演示。 如果没有特别说明,那么这里使用的 OpenCV版本都 是基于 OpenCV 3.3 Android SDK。

  • 作为使用最为广泛的计算机视觉开源库, OpenCV 在开源社区与英特尔、谷歌等大 公司的共同努力之下,发展到今天,已经吸引了全世界各地的开发者编译和使用它实现 各种应用程序。而伴随着人工智能时代的到来,作为人工智能眼睛的计算机视觉必然会 进一步释放活力,满足市场 需要 。 OpenCV 作为计算机视觉开源框架,其在移动端支持 Android 系统的特性必将进一步深入到移动开发的各种应用场景之中,下面就来开启一段 OpenCV 学习旅程 。

1.1 OpenCV 是什么

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

1.1.1 OpenCV 的历史与发展

在 OpenCV 孕育发展的过程中, Intel 公司做出了巨大的贡献, OpenCV 最初是 Intel 公司的内部项目,随着时间的推移、 OpenCV 的功能算法得到不断的优化与增强,不过 是短短 十几年的时间 ,其已经席卷整个业界,得到众多著名 IT 公司的大力支持,其中 包括大名鼎鼎的机器人公司 Willow Garage 与搜索引擎公司 Google。 下面的时间节点对 OpenCV 的发展都产生过重要影响,具体如下 。

  • 1999年, OpenCV正式立项,那个时候 Android智能手机的春天还没有到来。
  • 2000 年,在 IEEE 的计算机视觉与模式识别大会上 OpenCV 正式发布 Alpha 版本。
  • 2001 年~ 2005年, Intel公司陆续发布了最初的 5个 Beta测试版本。
  • 2006 年, OpenCVl.O 版本正式发布,基于 C 语言接口 SDK 调用 。
  • 2008 年, OpenCV 获得了当 时发展如日中天的 机器人公司 Willow Garage 的支持 、得到了进一步推广,然而不幸的是,作为机器人业界的传奇公司 Willow Garage却在 2014 宣布倒闭 。
  • 2009 年, OpenCV2.0 版本正式发布,这是 OpenCV 发展史上的一个重要里程碑,早期 的 OpenCV 是基于 C 语言实现的,在 2.0 的版本中又添加了 C++接口,并且对原来的 C 语言代码进行了优化和整合,以期吸引更多的开发者用户。
  • 2012年, Intel公司决定把 OpenCV开发者社区正式交给开源社区 opencv.org运营与维护 。
  • 2014 年, OpenCV3.0 版本发布 。
  • 2016 年 , OpenCV3.l 与 OpenCV3.2 版本相继发布,其扩展模块支持集成 GoogleTensorFlow 深度学习框架 。
  • 2017 年, OpenCV3.3.x 版本发布,在 Release 开发包中增加了 DNN (深度神经网络)模块支持 。
    OpenCV支持Java语言开发的AndroidSDK最早是始于2010年。 在OpenCV3.x版 本中, OpenCV 更加强调对移动端与嵌入式设备的支持 。

( 1 )编程语言
OpenCV 中的这些模块大多数都是基于 CIC++ 完成的,少量的 SDK 接口模块使用 Java、 Python等语言开发。 在最新开发的OpenCV的核心模块中, C++替代C成为了开 发语言 。

(2 )应用领域
OpenCV 自从 10 版本发布以来,立刻吸引了许 多公司的目光,被广泛应用于许多领 域的产品研发与创新上,相关应用包括卫星地图与电子地图拼接,医学中图像噪声处理、 对象检测,安防监控领域的安全与入侵检测、自动监视报警,制造业与工业中的产品质 量检测、摄像机标定,军事领域的无人机飞行、无人驾驶与水下机器人等众多领域 。

1.1.2 OpenCV模块介绍

OpenCV 分为正式的发布版本与扩展模块, Android SDK 所对应的是 OpenCV 的发 布版本,其扩展模块的功能可以通过源代码编译的方式进行集成与开发,关于扩展模块的编译与使用已 经超出了本书的讨论范围,这里就不再赘述了 。 例,OpenCV 正式发布版本中包含的核心功能模块具体如下 。

  • 二维与三维特征工具箱
  • 运动估算
  • 人脸识别
  • 姿势识别
  • 人机交互
  • 运动理解 口对象检测
  • 移动机器人
  • 分割与识别
  • 视频分析
  • 运动跟踪
  • 图像处理
  • 机器学习
  • 深度神经网络

除上述所述的核心功能模块之外,其扩展模块更加的庞大与繁杂。OpenCV Android SDK 可以从其官方主页上下载获得,下载地址为: http://opencv.org/opencv-3-3.html,在 最下面就可以发现 Android SDK 的下载链接 点击就可以直接去相关页面上下载最新的Android SDK。

1.1 .3 OpenCV Andro id SDK

  • OpenCV Android SDK 本质上是使用 Java语 言接 口通过 JNI 技术调用 OpenCV Cl C++代码完成的算法模块。 OpenCV4Android本身并不是一个纯 Java语言的计算机视觉 库,而是基于 OpenCVC++本地代码、通过 Java语言接口定义,基于 JNI 技术实现调 用 C++本地方法的 SDK 开发包 。 所以当你下载好 OpenCV Android SDK 之后,在它的 SDK 目录下可以看到如图 1-1 所示的目录结构 。

    image.png

    其中, etc 目录里面有两个文件夹,里面都是一些 XML 数据文件,这些 XML 数据是训练好的HAAR与LBP级联分类器数据; java目录里面是AndroidSDK相关文件; native 里面则是基于 CIC++ 编译好的 OpenCV Android 平台支持的本地库文件 、 JNI 层开 发所需要的头文件及 cmake 文件,其中库文件大多数以* .a 和* .so 结尾 。 而在与 SDK 同 层级的 samples 目录中则包含了 OpenCV Android SDK 的一些应用案例教程,以供初学 者参考。

  • 此外, OpenCV Android SDK 的功能与 OpenCV 对应发布版本中的功能完全相同, 唯一不同的是因为 Java 语言的关系, Java 层封装的接口的参数传递和方法调用,与 C++的接口相比有一些差异,这些都是为了更适应 Java语言的特性而做出的改动,使得 Android开发者更加容易学习与使用 OpenCV来解决问题。

openCV