📷 第4章 摄像头视频流捕获
使用 cv2.VideoCapture 打开摄像头、读取帧、释放资源、设置分辨率与帧率
▸ 摄像头视频流捕获核心流程:初始化 → 读取帧 → 处理 → 释放
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()
▸ 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}")
▸ 设置参数后建议用 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()