2. 摄像头实时捕获
任务目标
调用本机摄像头(索引0)实时捕获视频流,并在OpenCV窗口中逐帧显示画面。按 q 键退出程序,按 s 键保存当前帧为图片文件。
环境依赖
- Python 3.7+
- OpenCV:
pip install opencv-python
完整代码
import cv2
# 打开默认摄像头(索引0)
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("错误:无法打开摄像头,请检查设备连接或索引号")
exit(1)
# 设置采集分辨率(可选,部分摄像头不支持时自动忽略)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
print("按 's' 保存当前帧,按 'q' 退出")
while True:
ret, frame = cap.read()
if not ret:
print("错误:无法读取视频帧")
break
# 在窗口左上角显示实时帧率(可选信息)
cv2.putText(frame, "Press 's' to save, 'q' to quit", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
cv2.imshow("Camera Capture", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('s'):
cv2.imwrite("captured_frame.jpg", frame)
print("已保存当前帧为 captured_frame.jpg")
# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()
运行方式
python camera_capture.py
验证方法
- 程序启动后应弹出名为
Camera Capture的窗口,并显示摄像头实时画面。 - 按
s键后,当前目录下应生成captured_frame.jpg文件,可用图片查看器打开确认内容为按下瞬间的画面。 - 按
q键后窗口关闭,程序正常退出,终端无报错信息。 - 若摄像头被其他程序占用或设备不存在,终端会输出错误提示并退出,属预期行为。
常见问题
- 摄像头无法打开:确认设备未被其他应用占用;笔记本内置摄像头通常索引为0,外接USB摄像头可能为1或更大,可尝试修改
VideoCapture参数。 - 画面卡顿或延迟:降低
CAP_PROP_FRAME_WIDTH和CAP_PROP_FRAME_HEIGHT的值(如320×240),或移除waitKey中的延迟参数(保持1即可)。 - 窗口无响应:确保
cv2.waitKey(1)在循环内被调用,否则窗口无法处理键盘事件。