65.9K
CodeProject 正在变化。 阅读更多。
Home

Android 上的 OpenCV 基础图像处理

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2019年6月28日

CPOL

3分钟阅读

viewsIcon

24111

在 15 分钟内开始使用 Android 上的 OpenCV。

引言

OpenCV 是一个流行的开源图像处理库,可以轻松地在 Android 上运行。 尽管你需要使用 Android Native Development Kit (NDK) 并且可能需要 C++,但在 Android 上开始使用 OpenCV 却快速而简单。 本文向你展示了如何在标准的 Android Studio AVD 上运行 OpenCV。 你不需要任何特殊的硬件或软件,只需 Android Studio。 你甚至不需要 Android 手机,因为 AVD 可以正常工作。

为了帮助你了解如何将 OpenCV 图像处理应用于 360 度图像,AVD 模拟了 RICOH THETA,这是一款带有嵌入式 Android 操作系统的消费级 360 度相机。

相同的技术可以用于任何 Android 手机或任何在相机内部运行 Android 操作系统的相机。

如果你对 360 度图像感兴趣,请参阅配套文章 VR Image Processing with Android,其中介绍了 VR 头显和 Google StreetView 中使用的 360 度图像的基本概念。 它还涵盖了使用标准 Android BitmapFactoryBitmap 类的基本图像处理。

不要被 OpenCV 吓倒。 它比你想象的更容易。

背景

render_export

OpenCV 是一个灵活的计算机视觉和图像处理库。 开源项目 HDR2EXR 由开发人员 Kasper Oelemans 构建,将 33 张静态 360 度图像组合成一个 EXR 文件。 然后,该文件用于为 3D 资源提供照明。 在 Alexandre Dizeux 的上述 Blender 建模示例中,光线和反射是从 OpenCV 在消费级相机 RICOH THETA 中运行生成的文件生成的。

OpenCV 也可以与视频流一起使用。 在开源项目 theta plugin opencv detection sample 中,开发人员 roohii_3 展示了如何在检测到运动时触发相机拍照。

为了简单起见,我将向你展示如何在单个静态图像上应用 OpenCV。 这将帮助你开始在 Android 设备上运行 OpenCV 的基础知识。

Using the Code

从 GitHub 上 Fork 这个项目。

https://github.com/codetricity/no-camera-opencv

在 Android Studio 中打开该项目。

构建

  • JRE 1.8.0
  • Android Studio 3.3.2
  • Gradle 4.10.1
  • OpenCV 3.4.5
  • gradle.build (app) 中,由于使用了 lambda,请将 sourceCompatibilitytargetCompatibility 指定为 1.8

Android.mk 中,设置你的 include 路径。

要查看 Android.mk 文件,请转到 Android Studio 的 “Project Files” 视图。 默认视图是 “Android”。 你需要从下拉菜单访问 Project Files。

android.mk

编辑下面的屏幕截图中的路径,以匹配你的本地 OpenCV 源代码的路径(它是此 repo 的一部分)。

include path

当你运行该项目时,它将启动一个模拟器。

first screen

使用包含的示例图像测试处理。

process image

此演示使用内置的 OpenCV 示例代码来交换颜色空间。

processed image

查看此处的简短 C++ 示例 here

RGBA2BGRA 部分将交换颜色空间。 你现在可以编辑该行以通过其他方式处理静态图像。

此代码将垂直翻转图像。

cv::flip(m_src, m_dst, 0);

flipped

限制

并非所有 OpenCV 库都在此 360 度相机模拟中工作。 此模拟还使用 OpenCV3,而不是更新的 OpenCV4。

关注点

虽然我专注于在相机内部运行 OpenCV,但你可以使用 OpenCV for Android SDK 直接在手机上运行 OpenCV。 我喜欢完整 360 度视角的独特视角,但我理解专用硬件价格昂贵。 通过学习 OpenCV,我还了解了 EXR 文件以及它们如何在特效行业中使用,以在 Blender(开源)、Autodesk MAYA、来自 Nuke FoundryDavinci Resolve Fusion 等工具中提供全局照明。

为了测试全局照明,甚至有人为我们许多人使用的相机构建了一个 3D 资源。

Image

后续步骤

虽然 OpenCV、Android NDK 和 C++ 可能是新概念,但可以通过少量代码更改来开始。 如果你使用 OpenCV 和 360 度图像或视频构建了任何内容,请在 theta360.guide dev community 中告诉我们。

历史

  • 2019年6月28日:初始版本
© . All rights reserved.