繁体   English   中英

Android camera2 API 中预览图像大小和捕获图像大小有什么关系?

[英]What's relationship between preview image size and captured image size in Android camera2 API?

我正在使用 camera2 API 在 Android 中构建一个图像处理项目。 我使用 TextureView 获取预览屏幕,并使用 ImageReader 获取图像帧。 出于图像处理的目的,我需要在ImageReader中获取最大尺寸的帧,并且对预览帧的尺寸没有任何要求。 所以我分别使用以下代码设置帧的大小:

        StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        imageDimension = map.getOutputSizes(SurfaceTexture.class)[0];
        texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());

        List<Size> outputSizes = Arrays.asList(map.getOutputSizes(sImageFormat));
        largest = Collections.max(outputSizes, new CompareSizesByArea());
        mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), sImageFormat, 1);

五月份测试的Android设备华为P9:imageDimension为:1280*720; 最大的是:3968*2976。

我发现预览屏幕效果很好,但是,onImageAvailable 中捕获的图像是全黑的,我想什么也没捕获。

我尝试了两种方法来弄清楚这里发生了什么。 1)我把ImageReader的size设置为imageDimension,发现抓到的图片是可以的。 2)我将预览帧的大小设置为最大,发现预览屏幕是黑色的。

因此,我想知道 ImageReader 中捕获的图像的大小是否应该小于预览帧的大小。 是这样,如何设置预览帧的最大分辨率?

无论如何,我的目的是获得具有最大分辨率的帧以及流畅的预览屏幕。 欢迎任何建议。 谢谢。

从理论上讲,两个独立输出的分辨率应该没有区别,只要您在CameraDevice.createCaptureSession() 文档的表格中列出的多个流的分辨率保证范围内。 如果您以高于这些保证的分辨率运行,事情可能不会按预期进行。

一般来说,我建议保持预览分辨率 <= 1080p (1920x1080); 许多设备无法以高于该尺寸的分辨率生成平滑的 30fps 预览; 有些甚至可能需要 720p 或更低。 此外,设备上的 GPU 实际上可能无法处理全分辨率相机输出,这可能解释了某些黑色预览输出。

ImageReader 没有理由需要小于预览; 我怀疑您的预览尺寸可能太高了。

所以尝试以下配置:

  • 全分辨率图像阅读器
  • 1080p 或类似预览

在某些设备上,如果捕获的纵横比不适合预览的纵横比,则捕获可能需要更长的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM