【问题标题】:Video processing in AndroidAndroid中的视频处理
【发布时间】:2011-12-23 20:56:12
【问题描述】:

我正在使用带有 Eclipse 的 Android 2.2。

我想制作一个捕获视频的应用程序,并且对于每一帧,将其作为位图发送到处理它的方法并返回一个新位图并显示处理后的位图。

我对 Android 不是很熟悉,所以请谁能给我发一份我需要查看的资源来做这样的事情?

【问题讨论】:

    标签: java android camera


    【解决方案1】:

    使用 Android SDK 完成以下步骤非常简单:

    • 从相机捕获预览帧作为位图数据。 Camera.PreviewCallback 将返回 byte[] 的数据,以多种可能的图像格式表示帧。
    • 修改像素数据。由于数据以原始字节的形式返回,因此对数据进行调整相对容易......这里的困难在于为您想要执行的特定图像处理应用算法。没有任何内置效果(4.0 之前)可以简单地应用于图像,因此您必须自己编写。
    • 还可以将数据解码为Bitmap 对象,以便更轻松地处理像素。在 2.2 中,您可以选择使用 NDK 和 jnigraphics 在本机代码中处理位图的像素,这比 Java 层要快得多。
    • 获取结果Bitmap 的内容并显示它。对于快速移动的数据,您可能希望在SurfaceView 上显示它;使用该视图包含的SurfaceHolder 中可用的lockCanvas()unlockCanvasAndPost() 方法。

    如果这就是您想做的全部,您可以轻松完成。但是,这与捕获视频不同。 Android 目前不提供挂钩让您将帧实时流式传输到编码的视频容器(MPEG4、3GP 等)中。它的视频捕捉功能被紧紧地包裹在MediaRecorder 中,它控制着从帧捕捉到编写编码视频的整个过程。您将需要一个第三部分库,例如 FFMPEG(已在 Android 应用程序中多次使用 NDK 层构建和运行)来协助修改帧的编码过程。

    我知道您的目标是 2.2,但 Android 4.0 确实在这方面提供了一些帮助,因为他们发布了一个新版本的 NDK,它允许人们在从流中读取图像数据然后将其交给表示层。但是,我没有花足够的时间来了解它是否适​​合您的情况。

    【讨论】:

    • 我真的不想捕捉视频,使用预览对我来说很棒。谢谢!
    • 嗨,如何使用一系列位图图像创建视频?我该如何渲染它?
    【解决方案2】:

    如果你想做更复杂的实时视频处理,我强烈推荐OpenCV for Android

    OpenCV 是一个计算机视觉库,可让您实时处理视频,它具有执行简单任务(如检测边缘)或更复杂任务(如检测人脸和匹配特征)的库。

    您可以在一天内让 OpenCV 在您的 Android 手机中运行,尤其是因为它包含大量文档和示例。

    【讨论】:

    • openCV 在速度和能力方面是否与 FFMpeg 一样能够连接图像、处理代码和输入流、过滤等。
    【解决方案3】:

    您可以使用Camera.setPreviewCallbackCamera.PreviewCallback#onPreviewFrame 来监听来自相机的预览帧。

    2d Barcode 扫描仪的代码可能是一个有用的起点: ZXing

    【讨论】:

      猜你喜欢
      • 2012-12-31
      • 2015-01-09
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      相关资源
      最近更新 更多