📷 第4章 摄像头视频流捕获

使用 cv2.VideoCapture 打开摄像头、读取帧、释放资源、设置分辨率与帧率
cv2.VideoCapture (摄像头ID / 视频路径) cap.read() 返回 (ret, frame) 处理帧 运动检测 / 显示 cap. release() set(cv2.CAP_PROP_*) 分辨率 · 帧率
▸ 摄像头视频流捕获核心流程:初始化 → 读取帧 → 处理 → 释放

4.1 打开摄像头

cv2.VideoCapture 是 OpenCV 中用于捕获视频流的类。传入设备索引 0 通常表示默认摄像头,也可传入视频文件路径。

import cv2

# 打开默认摄像头 (索引0)
cap = cv2.VideoCapture(0)

# 检查是否成功打开
if not cap.isOpened():
    print("无法打开摄像头")
    exit()

4.2 读取帧 & 释放资源

cap.read() 返回两个值:布尔值 ret 和图像帧 frame。使用完毕后务必调用 cap.release() 释放摄像头。

while True:
    ret, frame = cap.read()
    if not ret:
        print("无法获取帧,退出")
        break

    # 在此处处理帧 (例如显示)
    cv2.imshow('Camera', frame)

    # 按 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源 & 关闭窗口
cap.release()
cv2.destroyAllWindows()
cap.read() 返回元组 ret: bool frame: ndarray True / False H×W×3
▸ read() 返回布尔值与图像帧,帧为 numpy 数组

4.3 设置摄像头参数

通过 cap.set(propertyId, value) 调整分辨率、帧率等。常用属性如下表:

属性标识含义示例值
cv2.CAP_PROP_FRAME_WIDTH画面宽度 (像素)1280
cv2.CAP_PROP_FRAME_HEIGHT画面高度 (像素)720
cv2.CAP_PROP_FPS期望帧率 (帧/秒)30
cv2.CAP_PROP_BRIGHTNESS亮度 (部分摄像头支持)0.5
# 设置分辨率为 1280x720, 帧率 30fps
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 30)

# 读取实际参数 (部分摄像头可能不支持设定值)
width  = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps    = cap.get(cv2.CAP_PROP_FPS)
print(f"实际分辨率: {width} x {height}, 帧率: {fps}")
默认参数 640×480 ~30fps cap.set() 1280×720 60fps (请求) 实际参数 cap.get() 验证生效值
▸ 设置参数后建议用 get() 确认实际生效的分辨率与帧率

4.4 完整示例:参数配置 + 循环读取

import cv2

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 30)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('实时画面', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()