如何使用 Camera 2 API Android 提高捕获图像的质量?

Posted

技术标签:

【中文标题】如何使用 Camera 2 API Android 提高捕获图像的质量?【英文标题】:How to increase the quality of captured image using Camera 2 API Android? 【发布时间】:2017-06-07 10:42:27 【问题描述】:

我正在使用 google 示例创建 android 相机应用程序。手机拍摄图像后,图像质量会有所不同。相机预览具有比输出图像更好的图像质量。如何提高输出图像的质量?捏缩放后预览图像和输出图像的质量差异甚至增加。这是我的photo 片段,它是base 类。

【问题讨论】:

不要链接到代码。在此处发布。 【参考方案1】:

提高图像质量的唯一方法是将 ImageReaderSize 提高到最大分辨率:

mImageReader = ImageReader.newInstance(pictureSizeValue.getWidth(), pictureSizeValue.getHeight(), format, maxImages);

此外,您可以使用 CaptureRequest 中的密钥 CaptureRequest.JPEG_QUALITY 来提高质量。

mCaptureRequestBuilder.set(CaptureRequest.JPEG_QUALITY, (byte) 100);

但是,老实说,JPEG_QUALITY 值之间的 91-100 之间的差异很小,并且您将在此过程中获得更大的图像。您可以在此处查看质量大小之间的曲线:

【讨论】:

嗨@Francisco Durdin Garcia。感谢你的回复。我已经添加到我的项目中: Size large = Collections.max(Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)), new CompareSizesByArea()); mImageReader = imageReader.newInstance(largest.getWidth(), maximum.getHeight(), ImageFormat.JPEG, /*maxImages*/1);还有: captureBuilder.set(CaptureRequest.JPEG_QUALITY, (byte)100);它在 Nexus 5X 设备上运行良好,但在三星设备上无法正常运行,如 Note 5。你知道如何解决三星设备的这个问题吗? “它不能正常工作”是什么意思?如果您想要更高的质量,您应该设置您的游览 imageReader 从 CameraCharacteristics 中游览 ResolutionMap 检索的最大尺寸 对于捏缩放我使用了这个代码示例***.com/a/35289982/4836875 缩放后输出图像的质量与相机预览不同。可能是缩放代码本身的问题吗? 当您使用缩放时,您正在执行“数字”缩放。 Camera API2 不像普通相机那样支持传统的缩放,它只是裁剪预览矩形,使图像变大,当然会损失质量。你可以在这里阅读更多关于它是如何工作的:developer.android.com/reference/android/hardware/camera2/…

以上是关于如何使用 Camera 2 API Android 提高捕获图像的质量?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现RTMP推送Android Camera2数据

如何使用Android的Camera2 API

在 Android 中基于叠加层裁剪位图 - Camera API 2

Android:如何检查设备是不是实现了 Camera2 api 功能?

Android之camera1和2的简单使用

Android之camera1和2的简单使用