3 · 第一个摄像头程序
cv2.VideoCapture() 函数详解 · 打开默认摄像头 · 读取第一帧 · 释放摄像头
🔍 cv2.VideoCapture() 函数详解
cv2.VideoCapture() 是 OpenCV 中用于从摄像头或视频文件读取帧的核心接口。它返回一个 VideoCapture 对象,通过该对象可以控制摄像头、查询属性、抓取图像。
| 参数形式 | 说明 | 示例 |
|---|---|---|
cv2.VideoCapture(index) | 打开摄像头设备索引(0 表示默认摄像头) | cap = cv2.VideoCapture(0) |
cv2.VideoCapture(filename) | 打开视频文件或图像序列 | cap = cv2.VideoCapture('test.mp4') |
cv2.VideoCapture(apiPreference) | 指定后端 (MSMF, V4L2 等) | cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) |
图 3-1 cv2.VideoCapture 对象创建与帧读取流程
📷 打开默认摄像头
使用索引 0 打开系统默认摄像头。如果电脑有多个摄像头,可尝试 1, 2 等。建议配合 cap.isOpened() 检查是否成功。
import cv2
# 打开默认摄像头 (索引0)
cap = cv2.VideoCapture(0)
# 检查是否成功打开
if not cap.isOpened():
print("❌ 无法打开摄像头")
exit()
else:
print("✅ 摄像头已打开")
图 3-2 默认摄像头 (index=0) 与系统映射
📸 读取第一帧
使用 cap.read() 返回两个值:ret (布尔值,表示是否成功读取) 和 frame (numpy 数组,即图像帧)。
# 读取第一帧
ret, frame = cap.read()
if ret:
print(f"✅ 成功读取第一帧,尺寸: {frame.shape}")
# 此时 frame 为 (height, width, 3) 的 BGR 图像
else:
print("❌ 读取帧失败")
💡 提示: 第一帧通常用于验证摄像头是否正常工作。如果
ret 为 False,可能是摄像头被占用或驱动问题。
图 3-3 read() 返回双值:状态与帧数据
🔓 释放摄像头
使用 cap.release() 关闭摄像头,释放资源。这是一个好习惯,避免摄像头被持续占用。
# 释放摄像头
cap.release()
print("🔓 摄像头已释放")
完整的“打开 → 读取一帧 → 释放”示例:
import cv2
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头")
exit()
ret, frame = cap.read()
if ret:
cv2.imshow("First Frame", frame) # 显示第一帧
cv2.waitKey(0) # 等待按键
cv2.destroyAllWindows()
cap.release()
图 3-4 摄像头对象生命周期:创建 → 读取 → 释放
📋 本章小结
- cv2.VideoCapture() 是摄像头访问的入口,支持设备索引或文件路径。
- 使用
cap.isOpened()确保摄像头可用。 cap.read()返回(ret, frame),第一帧用于验证。- 调用
cap.release()释放摄像头,避免资源泄漏。