【问题标题】:Processing Android camera frames in real time实时处理Android相机帧
【发布时间】:2011-08-03 19:01:18
【问题描述】:

我正在尝试创建一个实时处理相机帧的 Android 应用程序。首先,我只想显示相机看到的灰度版本。我已经设法从 onPreviewFrame 方法中的字节数组中提取了适当的值。下面只是我的代码的一个 sn-p:

byte[] pic;
int pic_size;
Bitmap picframe;
public void onPreviewFrame(byte[] frame, Camera c)
{
    pic_size = mCamera.getParameters().getPreviewSize().height * mCamera.getParameters().getPreviewSize().width;
    pic = new byte[pic_size];
    for(int i = 0; i < pic_size; i++)
    {
        pic[i] = frame[i];
    }
    picframe = BitmapFactory.decodeByteArray(pic, 0, pic_size);
}

byte[] 帧数组的第一个 [width*height] 值是亮度(灰度)值。提取它们后,如何将它们作为图像显示在屏幕上?它也不是二维数组,那么如何指定宽度和高度?

【问题讨论】:

    标签: android image-processing camera


    【解决方案1】:

    您可以从OpenCV4Android SDK 获得广泛的指导。查看他们可用的示例,特别是Tutorial 1 Basic. 0 Android Camera

    但是,就我的情况而言,对于密集的图像处理,这将比实时图像处理应用程序的可接受速度要慢。 一个很好的替代他们的 onPreviewFrame 的字节数组转换为 YUVImage:

    YuvImage yuvImage = new YuvImage(frame, ImageFormat.NV21, width, height, null);

    创建一个与图像大小相同的矩形。

    创建一个 ByteArrayOutputStream 并将其、矩形和压缩值传递给 compressToJpeg():

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); yuvimage.compressToJpeg(imageSizeRectangle, 100, baos);

    byte [] imageData = baos.toByteArray();

    Bitmap previewBitmap = BitmapFactory.decodeByteArray(imageData , 0, imageData .length);

    在表面上渲染这些 previewFrames 和所涉及的最佳实践是一个新的维度。 =)

    【讨论】:

    • 这是否会发生将 YUV 图像转换为带有中间 JPEG 的位图?几乎没有可行的实时解决方案
    • 我强烈建议不要这样做。 android 上的 OpenCV 将增加项目的复杂性,并且还需要大小约为 10mb 的本机库。 Android 确实拥有完成 OP 所需的所有功能。 OpenCV 是一个很棒的库,但在这种情况下有点矫枉过正。
    【解决方案2】:

    这个非常古老的帖子现在引起了我的注意。

    '11 中可用的 API 受到更多限制。今天,人们可以使用 SurfaceTexture(参见example)在(一些)操作后预览相机流。

    【讨论】:

      【解决方案3】:

      使用当前可用的 Android 工具/API,这不是一件容易的事。一般来说,实时图像处理最好在 NDK 级别完成。要只显示黑白,您仍然可以在 java 中进行。包含帧数据的字节数组采用 YUV 格式,其中 Y-Plane 位于首位。因此,如果您仅获得 Y 平面(第一个宽度 x 高度字节),它已经为您提供了黑色和白色。

      我确实通过大量的工作和试验实现了这一目标。您可以在 google 上查看该应用程序: https://play.google.com/store/apps/details?id=com.nm.camerafx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-15
        • 2017-07-02
        • 2014-03-19
        相关资源
        最近更新 更多