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)
摄像头索引 VideoCapture 对象 .read() 帧
图 3-1 cv2.VideoCapture 对象创建与帧读取流程

📷 打开默认摄像头

使用索引 0 打开系统默认摄像头。如果电脑有多个摄像头,可尝试 1, 2 等。建议配合 cap.isOpened() 检查是否成功。

import cv2

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

# 检查是否成功打开
if not cap.isOpened():
    print("❌ 无法打开摄像头")
    exit()
else:
    print("✅ 摄像头已打开")
索引 0 默认摄像头 系统分配
图 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,可能是摄像头被占用或驱动问题。
cap.read() ret True/False frame numpy 数组 显示
图 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()
VideoCapture .read() .release() 资源释放
图 3-4 摄像头对象生命周期:创建 → 读取 → 释放

📋 本章小结

  • cv2.VideoCapture() 是摄像头访问的入口,支持设备索引或文件路径。
  • 使用 cap.isOpened() 确保摄像头可用。
  • cap.read() 返回 (ret, frame),第一帧用于验证。
  • 调用 cap.release() 释放摄像头,避免资源泄漏。