Android 测光梳理

什么是测光

我们所看到的,不是物体本身,而且这个物体上反射出来的光,我们想要看东西,我们的眼睛就需要接受这个光,同理,相机想要拍出照片,也需要接收这个光。
人眼是可以自动调节进光量的,但是相机是做不到的,所以,我们需要控制这个光的进入,光进入多了,照片会过曝,光进入少了,照片会欠曝,这个时候,我们就需要测光了。

测光就是测光线的明暗,使相机实现正确曝光的过程。也就是组合曝光参数:光圈,ISO,快门

测光的原理

相机在测光过程中,会将拍摄的所有物体都默认为反射率18%的灰色,专业术语叫“中级灰”,并以此作为测光的基准,曝光的目的是为了正确还原这种灰色。因为18%灰与人皮肤平均反射光的色调一样。
但是18%灰也不是准确的,对于纯白,纯黑,会导致画面的影调和色彩的失真。

测光方式

  • 评价测光,是最常用的一个测光模式,也叫多区域测光。对画面的整体亮度进行平均测定,对逆光主体也有效。
  • 局部测光,是对画面的中央部分进行测光,相机的测光元件会对画面中心约占画面12%的范围进行测光,并最终进行平均加权而得出测光数据。
  • 点测光,比局部测光更为精确,测光元件仅测量画面最中心1%-3%的极小范围区域进行测光。
  • 中央重点平均测光:将画面中央约60%的区域作为测光的重点,同时并兼顾画面的边缘。与评价测光的区别在于相机会根据拍摄者的需要强调对某个区域进行重点测光,所获得的图像会很少有某个区域欠曝或过曝的问题出现,对于一些重点主体部位,图像也能很清晰地进行反映。

Android中的测光

CONTROL_AE_ANTIBANDING_MODE

用于抗闪烁的。
对于某些类型的照明装置,例如一些荧光灯,以电源频率的速度闪烁,如果曝光时间不正确,则可能最终的成像中,闪烁成了图像上的一组亮带。

它的值有:

  • OFF
  • 50HZ
  • 60HZ
  • AUTO

可使用CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES查询支持的值。

CONTROL_AE_EXPOSURE_COMPENSATION

设置曝光补偿,可调节图像亮度。
它是以step进行调整的,step的大小通过CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP进行查询,曝光补偿范围通过CameraCharacteristics#CONTROL_AE_COMPENSATION_RANGE进行查询。
例如,如果曝光值(EV)步长为0.333,则“6”表示+2 EV的曝光补偿; -3意味着-1 EV的曝光补偿。
一个EV表示图像亮度加倍。

只有在CaptureRequest#CONTROL_AE_MODE != OFF的情况下才有效。或者在CaptureRequest#CONTROL_AE_LOCK == true时也有效。

在曝光补偿改变的情况下,相机设备可能需要几帧才能到达新请求的曝光目标。在此期间,CaptureResult#CONTROL_AE_STATE字段将处于SEARCHING状态。 达到新的曝光目标后,CaptureResult#CONTROL_AE_STATE将从SEARCHING更改为CONVERGED,LOCKED(如果启用了AE锁定)或FLASH_REQUIRED(如果场景太暗而无法进行静态捕捉)。

CONTROL_AE_REGION

设置自动曝光测量区域。
权重必须在[0,1000]以内,而且代表的是这个区域中每个像素的权重。在 metering result 中,相同权重的 更大的mertring aream 比 较小的区域有更多影响。metering 区域可以重叠,而且相机设备会叠加重叠区域的权重。
权重是相对于其他计量区域的权重,因此如果仅使用一个区域,则所有非零权重将具有相同的效果。 忽略0权重的区域。
这个权重是设置在MeteringRectangle中的。

手动曝光设置:

只有在CaptureRequest#CONTROL_AE_MODE为OFF并且支持时才可以使用。

LENS_APERTURE:光圈

支持的光圈范围可使用CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES查询。
在光圈正在改变时,LENS_STATE会被设置为MOVING。

SENSOR_EXPOSURE_TIME:快门/曝光时间

只有在CaptureRequest#CONTROL_AE_MODE or CaptureRequest#CONTROL_MODE为OFF时才有效。
可以通过CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE进行范围查询。

SENSOR_SENSITIVITY:ISO/灵敏度

可通过 CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE进行范围查询。
只有在CaptureRequest#CONTROL_AE_MODE or CaptureRequest#CONTROL_MODE为OFF时才有效。
SENSOR_FRAME_DURATION:
从帧曝光开始到下一帧曝光开始的持续时间。

项目中:

对于设置不同的曝光补偿:4,2,0,-2,-4
对于华为nova2s,step为1/2,范围在-4~4

设置曝光补偿为2,AE_REGION建设一半(左图为曝光补偿为2,AE_REGION = FOCUS_REGION,右图为不设置曝光补偿)

更多相关文章

  1. Android开发之线性布局详解(布局权重)
  2. 说说Android桌面(Launcher应用)背后的故事(七)——又是一个附属
  3. Android(安卓)Dialog背景全透明 无边框
  4. android checkbox 扩大点击区域
  5. android讲义2之简单图片浏览器且有截图效果(对ImageView使用)
  6. 在SOUI中使用网格布局
  7. android:点击popupwindow以外区域 popupwindow自动消失(转载)
  8. Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()
  9. Android(安卓)ActionBar使用方法

随机推荐

  1. Drawable、Bitmap、Canvas和Paint的区别
  2. 栈的应用(运算问题)
  3. 性能优化技巧:外键序号化
  4. RocketMQ 源码分析 —— Message 顺序发
  5. 芋道 Spring Boot SpringMVC 入门
  6. 芋道 Spring Boot 参数校验 Validation
  7. 程序员写简历时必须注意的技术词汇拼写(持
  8. 推荐几个炫酷的Python开源项目
  9. HTML5 WebGL 水波荡漾动画,超逼真
  10. HTML5圣诞礼物大炮发射3D动画