如何使用 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 提高捕获图像的质量?的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 中基于叠加层裁剪位图 - Camera API 2