如何解决camera2 api 谷歌像素不一致的图像焦点
我正在使用 camera2 API 发送一个带有手动指定的缩放、聚焦和曝光的 captureRequest。
我每 150 毫秒发送一次相同的捕获请求,更新曝光参数以保持曝光合理。
但是,从一张图像到下一张图像的质量会发生巨大变化:
相比:
对我来说,焦点似乎正在从一张图像更改为下一张图像,鉴于我正在设置的参数,这似乎是不可能的(见下文)。也许这是我在快速快门速度下使用的手机(谷歌像素 4a)的某种伪影?
这是另一个很好的例子:
与下一张照片相比:
第二张图片非常模糊,这不是由于运动模糊,因为汽车引擎盖同样模糊......除非相机在挡风玻璃上晃动?
有时我也会得到像这样非常奇怪的工件:
也许与rolling shutter有关?
我使用的代码如下(但由于涉及很多类而被抽象出来):
private val recordRequestBuilder: CaptureRequest.Builder by lazy {
// Capture request holds references to target surfaces
session.device.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE).apply {
addTarget(viewFinder.holder.surface)
addTarget(imageReader.surface)
}
}
...
recordRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_OFF)
...
recordRequestBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE,DISTANCE_CONSTANT)
...
recordRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION,CROP_REGION_CONSTANT)
...
recordRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,CaptureRequest.CONTROL_AE_MODE_OFF)
recordRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY,800)
recordRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME,1_000_000L)
...
session.capture(
recordRequestBuilder.build(),object : CameraCaptureSession.CaptureCallback() {
override fun onCaptureCompleted(session: CameraCaptureSession,request: CaptureRequest,result: TotalCaptureResult) {
super.onCaptureCompleted(session,request,result);
Log.d("image_queue","capture completed")
}
},cameraHandler
)
假设我没有在某处干扰我的逻辑,你会期望我设置的参数会导致我得到的照片吗?
我不是相机专家,所以任何帮助或只是随意的思考都会被极大地挪用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。