使用 Camera2 在 Android 中拍摄图像时如何获得绝对最大可能的曝光和感光度?
How to get absolute maximum possible exposure and sensitivity when capturing images in Android with Camera2?
我正在尝试使用 android.hardware.camera2.
最大限度地提高曝光度和感光度,让尽可能多的光线进入图像
以下是我现在使用的设置:
captureRequestBuilder.set( CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.BLACK_LEVEL_LOCK, true );
captureRequestBuilder.set( CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE,
CameraMetadata.COLOR_CORRECTION_ABERRATION_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.COLOR_CORRECTION_MODE, CameraMetadata.COLOR_CORRECTION_MODE_TRANSFORM_MATRIX );
int[] cstMatrix = new int[]{ 128, 128, 0, 128, 0, 128, 0, 128, 128, 128, 0, 128, 0, 128, 0, 128, 128, 128 };
ColorSpaceTransform cst = new ColorSpaceTransform( cstMatrix );
captureRequestBuilder.set( CaptureRequest.COLOR_CORRECTION_TRANSFORM, cst );
captureRequestBuilder.set( CaptureRequest.SHADING_MODE, CameraMetadata.SHADING_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.NOISE_REDUCTION_MODE, CameraMetadata.NOISE_REDUCTION_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTROL_SCENE_MODE_DISABLED );
captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_AWB_MODE, CameraMetadata.CONTROL_AWB_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.EDGE_MODE, CameraMetadata.EDGE_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.SENSOR_SENSITIVITY, MAX_SENSITIVITY );
captureRequestBuilder.set( CaptureRequest.LENS_FOCUS_DISTANCE, (float) 0.0 );
captureRequestBuilder.set( CaptureRequest.SENSOR_FRAME_DURATION, MAX_FRAME_DURATION );
captureRequestBuilder.set( CaptureRequest.SENSOR_EXPOSURE_TIME, MAX_FRAME_DURATION );
captureRequestBuilder.set( CaptureRequest.HOT_PIXEL_MODE, CameraMetadata.HOT_PIXEL_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.STATISTICS_FACE_DETECT_MODE, CameraMetadata.STATISTICS_FACE_DETECT_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.STATISTICS_LENS_SHADING_MAP_MODE, CameraMetadata.STATISTICS_LENS_SHADING_MAP_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.SENSOR_TEST_PATTERN_MODE, CameraMetadata.SENSOR_TEST_PATTERN_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE, CameraMetadata.CONTROL_VIDEO_STABILIZATION_MODE_OFF );
// build all the settings into the camera request
CaptureRequest captureRequest = captureRequestBuilder.build();
// Finally, we start displaying the camera preview.
mCaptureSession.setRepeatingRequest( captureRequest, mCaptureCallback, backgroundHandler );
其中 MAX_SENSITIVITY 和 MAX_FRAME_DURATION_NS 是从给定设备的 GetCameraCharacteristics 函数返回的最大值。
我正在使用 YUV_420_888 格式,因为似乎所有支持 Camera2 接口的 Android 设备都支持这种格式。
我希望对上面显示的设置和任何额外的设置进行完整性检查 tips/tricks 以充分利用每个 Camera2 兼容相机。
谢谢。
所以我发现相机特性调用返回的最大灵敏度并不是硬性限制。您可以将 CaptureRequest.SENSOR_SENSITIVITY 设置为远高于假定限制的值,至少对于我正在测试的手机而言。我希望这不是一个可以修复的错误,因为我依赖它。
我正在尝试使用 android.hardware.camera2.
最大限度地提高曝光度和感光度,让尽可能多的光线进入图像以下是我现在使用的设置:
captureRequestBuilder.set( CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.BLACK_LEVEL_LOCK, true );
captureRequestBuilder.set( CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE,
CameraMetadata.COLOR_CORRECTION_ABERRATION_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.COLOR_CORRECTION_MODE, CameraMetadata.COLOR_CORRECTION_MODE_TRANSFORM_MATRIX );
int[] cstMatrix = new int[]{ 128, 128, 0, 128, 0, 128, 0, 128, 128, 128, 0, 128, 0, 128, 0, 128, 128, 128 };
ColorSpaceTransform cst = new ColorSpaceTransform( cstMatrix );
captureRequestBuilder.set( CaptureRequest.COLOR_CORRECTION_TRANSFORM, cst );
captureRequestBuilder.set( CaptureRequest.SHADING_MODE, CameraMetadata.SHADING_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.NOISE_REDUCTION_MODE, CameraMetadata.NOISE_REDUCTION_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTROL_SCENE_MODE_DISABLED );
captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_AWB_MODE, CameraMetadata.CONTROL_AWB_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.EDGE_MODE, CameraMetadata.EDGE_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.SENSOR_SENSITIVITY, MAX_SENSITIVITY );
captureRequestBuilder.set( CaptureRequest.LENS_FOCUS_DISTANCE, (float) 0.0 );
captureRequestBuilder.set( CaptureRequest.SENSOR_FRAME_DURATION, MAX_FRAME_DURATION );
captureRequestBuilder.set( CaptureRequest.SENSOR_EXPOSURE_TIME, MAX_FRAME_DURATION );
captureRequestBuilder.set( CaptureRequest.HOT_PIXEL_MODE, CameraMetadata.HOT_PIXEL_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.STATISTICS_FACE_DETECT_MODE, CameraMetadata.STATISTICS_FACE_DETECT_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.STATISTICS_LENS_SHADING_MAP_MODE, CameraMetadata.STATISTICS_LENS_SHADING_MAP_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.SENSOR_TEST_PATTERN_MODE, CameraMetadata.SENSOR_TEST_PATTERN_MODE_OFF );
captureRequestBuilder.set( CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE, CameraMetadata.CONTROL_VIDEO_STABILIZATION_MODE_OFF );
// build all the settings into the camera request
CaptureRequest captureRequest = captureRequestBuilder.build();
// Finally, we start displaying the camera preview.
mCaptureSession.setRepeatingRequest( captureRequest, mCaptureCallback, backgroundHandler );
其中 MAX_SENSITIVITY 和 MAX_FRAME_DURATION_NS 是从给定设备的 GetCameraCharacteristics 函数返回的最大值。
我正在使用 YUV_420_888 格式,因为似乎所有支持 Camera2 接口的 Android 设备都支持这种格式。
我希望对上面显示的设置和任何额外的设置进行完整性检查 tips/tricks 以充分利用每个 Camera2 兼容相机。
谢谢。
所以我发现相机特性调用返回的最大灵敏度并不是硬性限制。您可以将 CaptureRequest.SENSOR_SENSITIVITY 设置为远高于假定限制的值,至少对于我正在测试的手机而言。我希望这不是一个可以修复的错误,因为我依赖它。