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) 在循环内被调用,否则窗口无法处理键盘事件。