sensor_auto_gain_control.py
# 本作品采用MIT许可证授权。
# 版权所有 (c) 2013-2023 OpenMV LLC。保留所有权利。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 传感器自动增益控制
#
# 此示例展示了如何控制传感器的增益
# 使用自动增益控制算法。
# 增益控制和曝光控制有什么区别?
#
# 通过增加图像的曝光时间,您可以获得更多
# 相机上的光线。这为您提供了最佳的信噪比。
# 通常总是希望优先增加曝光时间...但是,当您
# 增加曝光时间时,最大可达帧率会降低,
# 而且若图像中有物体移动,曝光时间越长,
# 模糊就越明显。增益控制允许您通过模拟和数字乘法器
# 提高每个像素的输出...但它同时也会放大
# 噪声。因此,最好先让曝光尽可能增加,
# 然后再用增益控制来弥补剩余的差距。
# 我们可以通过为自动增益控制算法设置增益上限来实现上述目标。
# 设置之后,算法将不得不
# 通过增加曝光时间来满足增益需求,而不是使用增益
# 来实现。但代价是当光照变化时,曝光时间会
# 变化得更多,而不是曝光保持恒定、
# 增益发生变化。
import csi
import time
csi0 = csi.CSI()
csi0.reset() # 重置并初始化传感器。
csi0.pixformat(csi.RGB565) # 将像素格式设置为RGB565 (or GRAYSCALE)
csi0.framesize(csi.QVGA) # 将帧大小设置为QVGA (320x240)
# OV7725传感器的增益db上限约为24 db。
csi0.auto_gain(True, gain_db_ceiling=16.0) # 默认增益。
# 注意!如果将增益上限设置得太低而不调整曝光控制
# 目标值,那么开启曝光控制时
# 会产生大量振荡。
csi0.snapshot(time=2000) # 等待设置生效。
clock = time.clock() # 创建一个时钟对象来跟踪FPS。
while True:
clock.tick() # 更新FPS时钟。
img = csi0.snapshot() # 拍照并返回图像。
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)