You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Picamera迁移到Picamera2:如何快速拍摄3张不同曝光图片?

解决方案:Picamera2连续拍摄不同曝光速度的照片

核心原理

Picamera2启动后无需重启相机,直接通过set_controls()方法实时修改曝光时间(ExposureTime),配合capture_file()或capture_array()就能快速完成多曝光拍摄。要保证速度,需避免重复启动/停止相机,同时合理配置相机的捕获模式。

代码实现

from picamera2 import Picamera2
import time

picam2 = Picamera2()

# 配置相机为快速捕获模式,关闭不必要的预览功能
still_config = picam2.create_still_configuration(
    main={"size": (1920, 1080)},
    controls={"FrameDurationLimits": (33333, 33333), "AeEnable": False},  # 固定30fps,关闭自动曝光
    buffer_count=4  # 增加缓冲区,提升连续捕获效率
)
picam2.configure(still_config)

picam2.start()
time.sleep(0.5)  # 给相机预留初始配置时间

# 定义三组不同的曝光时间,单位:微秒
exposure_times = [1000, 10000, 100000]

start_total = time.time()

for idx, exp_time in enumerate(exposure_times):
    # 实时更新曝光参数
    picam2.set_controls({"ExposureTime": exp_time, "AnalogueGain": 1.0})
    # 极短延时确保参数生效,可根据实际硬件微调
    time.sleep(0.05)
    # 捕获并保存照片
    picam2.capture_file(f"exposure_{idx}.jpg")

end_total = time.time()

picam2.stop()
print(f"拍摄完成,总耗时: {end_total - start_total:.2f}秒")

提速关键细节

  • 单次启动相机:相机启动是高耗时操作,全程仅启动一次,修改参数后直接捕获,避免重复初始化。
  • 固定帧率与缓冲区:配置FrameDurationLimits固定帧率,增加buffer_count减少IO等待,提升连续捕获的流畅度。
  • 最小化等待延时:参数设置后的等待时间可根据实际测试调整,只要相机完成参数切换即可,无需过长等待。
  • 锁定手动参数:固定AnalogueGain=1.0并关闭自动曝光,避免自动控制逻辑干扰手动曝光设置。

常见问题排查

如果曝光参数修改后未生效,检查以下几点:

  • 确认自动曝光已完全关闭:配置或set_controls中必须设置AeEnable=False,否则手动参数会被自动逻辑覆盖。
  • 曝光时间未超出传感器限制:不同传感器的最大曝光时间不同,可通过picam2.sensor_modes查看硬件参数,避免设置超出范围的值。
  • 关闭不必要的流:配置时不要包含preview流,减少资源占用,提升捕获速度。

内容的提问来源于stack exchange,提问作者Milchgraf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:35:42