一
精准可控:关闭自动曝光后,可自定义设置具体曝光时间(微秒级),从暗到亮灵活调节;
范围清晰:支持获取摄像头曝光时间范围,明确调节边界,避免参数超限;
即调即显:实时预览曝光参数调整后的成像效果,直观感受参数变化带来的画面差异;
二
基础配置:初始化与模式选择
首先完成摄像头与显示器的基础初始化,支持VIRT(虚拟)、LCD(3.1寸屏)、HDMI三种显示模式,按需选择即可:
# 显示模式选择:"VIRT"、"LCD" 或 "HDMI"DISPLAY_MODE = "LCD"# 初始化显示器if DISPLAY_MODE == "VIRT":Display.init(Display.VIRT, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, fps=60)elif DISPLAY_MODE == "LCD":Display.init(Display.ST7701, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True)elif DISPLAY_MODE == "HDMI":Display.init(Display.LT9611, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True)# 初始化摄像头并重置sensor = Sensor(id=2)sensor.reset()sensor.set_framesize(width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, chn=CAM_CHN_ID_0)sensor.set_pixformat(Sensor.RGB888, chn=CAM_CHN_ID_0)
核心操作:手动曝光控制
关闭自动曝光:在传感器启动前关闭自动曝光,开启手动调节模式;
获取曝光范围:查询摄像头支持的曝光时间区间,作为调节参考;
设置自定义曝光值:按需设置具体曝光时间(单位:微秒),实时生效。
# 关闭自动曝光sensor.auto_exposure(False)# 获取曝光时间范围range = sensor.get_exposure_time_range()if range:max_exp, min_exp = rangeprint(f"曝光范围:{min_exp:.2f} us - {max_exp:.2f} us")# 设置自定义曝光值(示例:10ms)sensor.exposure(10000)
效果演示:多档位曝光体验
通过循环切换不同曝光值,直观感受曝光时间对画面亮度的影响(每个档位显示2秒):
# 测试不同曝光值(2ms/5ms/10ms/20ms/33ms)test_exposures =exposure_step = 0frame_count = 0while True:img = sensor.snapshot(chn=CAM_CHN_ID_0)Display.show_image(img)# 每60帧(约2秒)切换一次曝光值if frame_count % 60 == 0:if exposure_step < len(test_exposures):new_exp = test_exposures[exposure_step]sensor.exposure(new_exp)print(f"设置新曝光:{new_exp} us ({new_exp/1000:.1f} ms)")exposure_step += 1else:exposure_step = 0frame_count += 1
三
参考SDK demo路径:
~/src/canmv/resources/examples/17-Sensor/camera_manual_exposure_lcd.py
四
运行代码前需确保CanMV K230开发环境已配置完成,摄像头与显示设备连接正常;
曝光时间单位为微秒(us),1ms=1000us,设置时建议在摄像头支持的曝光范围内调整;
目前无法动态开关自动曝光功能,所以需要在sensor.run()之前关掉自动曝光功能,再进行手动调节
获取曝光调节范围和手动调节曝光需要在sensor.run()之后