使用Raspberry Pi及Camera V3(广角版)拍照失败求助
问题分析与解决方案
你的代码核心问题是**app.exec()会启动Qt的事件循环并阻塞后续代码执行**,所以time.sleep(2)和picam2.capture_file('a.jpg')这两行永远不会被运行,自然不会生成图片文件。另外,你导入了time模块,但直接写sleep(2)会报错,应该用time.sleep(2)。
修复方案(两种可选)
方案1:用Qt定时器触发拍照
把拍照逻辑放到Qt的定时器中,让事件循环启动后自动执行拍照操作:
#!/usr/bin/python3 import sys import libcamera import time from PyQt5.QtCore import QTimer from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout) from picamera2.previews.qt import QGlPicamera2 from picamera2 import Picamera2 picam2 = Picamera2() app = QApplication([]) window = QWidget() qpicamera2 = QGlPicamera2(picam2, width=1280, height=720, keep_ar=True) layout_h = QHBoxLayout() layout_h.addWidget(qpicamera2, 80) window.setLayout(layout_h) window.setStyleSheet("background-color: black;") pic_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, transform=libcamera.Transform(vflip=1), display="lores") picam2.configure(pic_config) # 定义拍照函数 def take_photo(): time.sleep(2) # 等待相机稳定 picam2.capture_file('a.jpg') print("照片已保存为a.jpg") # 拍完照后可以选择退出程序 app.quit() # 启动相机后,用定时器触发拍照(延迟100ms确保预览启动) picam2.start() window.show() QTimer.singleShot(100, take_photo) app.exec()
方案2:调整执行顺序(不保留预览窗口)
如果不需要实时预览窗口,可先完成拍照再启动Qt预览(或直接不启动预览):
#!/usr/bin/python3 import sys import libcamera import time from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout) from picamera2.previews.qt import QGlPicamera2 from picamera2 import Picamera2 picam2 = Picamera2() pic_config = picam2.create_still_configuration(main={"size": (1920, 1080)}, lores={"size": (1280, 720)}, transform=libcamera.Transform(vflip=1), display="lores") picam2.configure(pic_config) picam2.start() time.sleep(2) picam2.capture_file('a.jpg') print("照片已保存为a.jpg") picam2.stop() # 如果需要预览,再启动Qt窗口 app = QApplication([]) window = QWidget() qpicamera2 = QGlPicamera2(picam2, width=1280, height=720, keep_ar=True) layout_h = QHBoxLayout() layout_h.addWidget(qpicamera2, 80) window.setLayout(layout_h) window.setStyleSheet("background-color: black;") picam2.start() window.show() app.exec()
额外注意事项
- 确保你的用户对保存图片的目录有写入权限,可通过运行
touch test.jpg测试是否能在当前目录创建文件 - 检查Camera V3的连接是否牢固,广角版的排线方向是否正确
- 运行代码时使用
python3 your_script.py,避免用python2
内容的提问来源于stack exchange,提问作者Albert FG
相关产品推荐
相关产品推荐

