在android中使用Camera2进行实时处理时应该采用什么图像格式?

在android中使用Camera2进行实时处理时应该采用什么图像格式?,camera,android-camera,opencv3.0,android-camera2,Camera,Android Camera,Opencv3.0,Android Camera2,我正在开发一个android应用程序,它可以处理Camera2预览帧,并在纹理上显示处理过的帧。首先,我使用Camera1API进行了测试,它可以很好地进行实时图像处理 private class CameraPreviewCallback implements Camera.PreviewCallback { @Override public void onPreviewFrame(byte[] data, Camera camera) { processingRunnable.setNe

我正在开发一个android应用程序,它可以处理Camera2预览帧,并在纹理上显示处理过的帧。首先,我使用Camera1API进行了测试,它可以很好地进行实时图像处理

private class CameraPreviewCallback implements Camera.PreviewCallback {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
  processingRunnable.setNextFrame(data, camera);
}
}

然后,我修改了使用Camera2API的代码。为了获得预览帧,我将ImageFormat设置为YUV_420_888

    mImageReaderPreview = ImageReader.newInstance(mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.YUV_420_888, 3);
            mImageReaderPreview.setOnImageAvailableListener(mOnPreviewAvailableListener, mBackgroundHandler);    

private final ImageReader.OnImageAvailableListener mOnPreviewAvailableListener = new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                Image mImage = reader.acquireLatestImage();
                if(mImage == null) {
                    return;
                }
           processingRunnable.setNextFrame(convertYUV420888ToNV21(mImage));
                mImage.close();
            }
        };

但是,它的工作速度比camera1慢。可能是因为有一个额外的转换从YUV_420_888到NV21。因为Camera1可以直接从Camera1提供NV21帧。

转换可能很昂贵,这取决于您如何实现它以及给定设备上YUV_420_888的布局

当然,如果它是用纯Java编写的,速度可能会很慢


这就是说,如果您使用的设备处于传统硬件级别,camera2必须在传统模式下运行,该模式接收YUV信息的速度可能较慢。对于这些设备,在您的用例中最好使用API1。

谢谢您的回答。图像处理部分采用OpenCV C++实现,但绘制的处理框架是纯java的。