camera - 在Android中使用Camera2进行实时处理时应采用哪种图像格式?

标签 camera android-camera opencv3.0 android-camera2

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

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

}

然后,我更改了使用camera2 API的代码。为了获得预览帧,我将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编写的,那可能会很慢。

也就是说,如果您使用的设备处于LEGACY硬件级别,则camera2必须在旧模式下运行,这对于接收YUV信息可能会很慢。对于这些设备,在您的用例中,最好使用API​​1。

关于camera - 在Android中使用Camera2进行实时处理时应采用哪种图像格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705943/

相关文章:

c# - WebCamTexture 不显示在 Unity3D 中?

java - 如何在三星 Galaxy 设备上同时打开前置和后置摄像头?

java - 在模拟器中拍照后相机崩溃

python - 用于在opencv3上进行视差映射的cv2.StereoSGBM_create()和cv2.StereoBM_create()函数之间有什么区别?

python-3.x - Opencv - ModuleNotFoundError : No module named 'cv2' - MacOS

ios - 在 iOS 上拍照后 Phonegap App 崩溃

iphone - 如何使用 iPhone 摄像头测量房间内的可见蓝光强度?

java - Android webview摄像头和麦克风权限已授予但无法访问

android - 在 Android 上使用 Camera API 尽可能快地拍照

c# - 使用 OpenCV(C#、emgu cv)检测屏幕上的输入文本字段