android-camera2 - camera2 api google 像素不一致的图像焦点
问题描述
我正在使用 camera2 API 发送带有手动指定缩放、焦点和曝光的 captureRequest。
我每 150 毫秒发送一次相同的捕获请求,更新曝光参数以保持曝光合理。
但是,图像的质量会从一张图像到下一张图像发生巨大变化:
相比:
对我来说,焦点似乎正在从一个图像变为下一个图像,考虑到我正在设置的参数,这似乎是不可能的(见下文)。也许这是我在以快速快门速度操作时使用的手机(谷歌像素 4a)的某种神器?
这是另一个很好的例子:
与下一张照片相比:
第二张图像非常模糊,这不是由于运动模糊,因为汽车引擎盖同样模糊......除非相机在挡风玻璃上晃动?
我有时也会得到像这样非常奇怪的工件:
也许与卷帘快门有关?
我使用的代码如下(但由于涉及到很多类,所以被抽象了):
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
)
假设我没有在某个地方搞砸我的逻辑,你会期望我设置的参数会导致我得到的照片吗?
我不是相机专家,所以任何帮助或只是随机的沉思都会被极大地占用。
解决方案
推荐阅读
- html - 活动选项卡时刷新页面
- reactjs - 带参数的 useQuery 时反应查询 useMutation
- html - 材质旋转木马不在材质网格内渲染
- macros - 如何使用 Scheme 中的语法规则从 List 创建 Alist?
- node.js - 将项目的节点版本从 v6x 更新到 v12x
- android - 导航视图的菜单项无法导航到各自的目的地
- flutter - 我想通过添加dependencis在我的其他flutter应用程序中导入我自己的flutter包(上传到私人git服务器上)但它不起作用
- python - 在 Pycharm 中使用 GPU 运行 TensorFlow
- python - 如何使用 Scrapy 为下一页提取数据
- reactjs - 在“{}”类型上找不到带有“字符串”类型参数的索引签名