相关疑难解决方法(0)

使用Android L和Camera2 API处理相机预览图像数据

我正在开发一个Android应用程序,它正在处理来自摄像头的输入图像并将其显示给用户.这很简单,我PreviewCallback在相机对象上注册了一个setPreviewCallbackWithBuffer.这很简单,并且可以与旧的相机API一起使用

public void onPreviewFrame(byte[] data, Camera cam) {
    // custom image data processing
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试移植我的应用程序以利用新的Camera2 API,我不确定我该怎么做.我在L预览示例中使用了Camera2Video,可以录制视频.但是,样本中没有直接的图像数据传输,因此我不明白应该在何处获取图像像素数据以及如何处理它.

有人可以帮我或建议如何获得PreviewCallbackandroid L 的功能,或者如何在将其显示到屏幕之前处理相机的预览数据?(相机对象上没有预览回调)

谢谢!

camera android image-processing preview android-5.0-lollipop

39
推荐指数
4
解决办法
3万
查看次数

将Android camera2 api YUV_420_888转换为RGB

我正在编写一个应用摄像头的应用程序,将其转换为rgb,以便进行一些处理.

它适用于使用NV21 Yuv格式的旧相机实现.我遇到的问题是使用新的Yuv格式YUV_420_888.在新的Camera2 Api中,图像不再正确转换为RGB,后者发送YUV_420_888 yuv格式而不是NV21(YUV_420_SP)格式.

有人可以告诉我如何将YUV_420_888转换为RGB?

谢谢

rgb android yuv android-camera android-5.0-lollipop

17
推荐指数
3
解决办法
1万
查看次数

有没有人设法使用RenderScript和新的Camera API获得YUV_420_888帧?

我正在使用RenderScript和Allocation从Android Camera2 API获取YUV_420_888帧,但是一旦我从分配中复制byte [],我只从组成帧的3个平面接收Y平面,而U和V平面值在字节[]中设置为0.我试图模仿previos相机API中的onPreviewframe,以便在应用程序处理相机帧时执行.我的分配创建如下:

Type.Builder yuvTypeBuilderIn = new Type.Builder(rs, Element.YUV(rs));
    yuvTypeBuilderIn.setX(dimensions.getWidth());
    yuvTypeBuilderIn.setY(dimensions.getHeight());
    yuvTypeBuilderIn.setYuvFormat(ImageFormat.YUV_420_888);
    allocation = Allocation.createTyped(rs, yuvTypeBuilderIn.create(),
            Allocation.USAGE_IO_INPUT | Allocation.USAGE_SCRIPT);
Run Code Online (Sandbox Code Playgroud)

而我的脚本看起来像:

#pragma version(1)
#pragma rs java_package_name(my_package)
#pragma rs_fp_relaxed

rs_allocation my_frame;
Run Code Online (Sandbox Code Playgroud)

android yuv renderscript android-camera android-5.0-lollipop

3
推荐指数
1
解决办法
9787
查看次数

在Android camera2下将YUV_420_888转换为位图的图像不正确

我正在尝试将YUV_420_888图像转换为来自camera2预览的位图。但是输出图像的颜色不正确。

接下来是我正在运行的用于生成位图的测试代码。仅是测试代码,因此请不要对不相关的因素进行任何代码审查,例如,位图将被回收,或者将连续创建RenderScript。该代码仅用于测试从YUV到RGB的转换,仅此而已。

其他因素是,该代码应从API 22及更高版本运行,因此使用RenderScript特定的ScriptIntrinsicYuvToRGB应该足够,而不必使用旧的手动转换,由于缺乏适当的YUV_420_888支持,因此仅在以前的Android版本中才需要使用。

由于RenderScript已经提供了专用于处理所有类型的YUV转换的ScriptIntrinsicYuvToRGB,我认为问题可能出在如何从Image对象获取YUV字节数据,但我无法弄清楚问题出在哪里。

要在Android Studio中查看输出位图,请在bitmap.recycle()中放置一个断点,因此在回收之前,可以使用“查看位图”选项在“变量调试”窗口中对其进行查看。

请让我知道是否有人可以发现转换的问题:

@Override
public void onImageAvailable(ImageReader reader)
{
    RenderScript rs = RenderScript.create(this.mContext);

    final Image image = reader.acquireLatestImage();

    final Image.Plane[] planes = image.getPlanes();
    final ByteBuffer planeY = planes[0].getBuffer();
    final ByteBuffer planeU = planes[1].getBuffer();
    final ByteBuffer planeV = planes[2].getBuffer();

    // Get the YUV planes data

    final int Yb = planeY.rewind().remaining();
    final int Ub = planeU.rewind().remaining();
    final int Vb = planeV.rewind().remaining();

    final ByteBuffer yuvData = ByteBuffer.allocateDirect(Yb + Ub + Vb);

    planeY.get(yuvData.array(), 0, Yb);
    planeU.get(yuvData.array(), Yb, …
Run Code Online (Sandbox Code Playgroud)

android bitmap yuv android-camera2

3
推荐指数
1
解决办法
1692
查看次数