第3章 · OpenCV入门

OpenCV库安装 · 读取摄像头 · 显示视频帧 · 保存图像 # 实战基石

3.1 安装 OpenCV (Python)

OpenCV (Open Source Computer Vision Library) 是计算机视觉领域最流行的库之一。在 Python 环境中,推荐使用 pip 安装核心包 opencv-python 以及扩展包 opencv-contrib-python(包含额外模块)。

pip install opencv-python import cv2 一行命令 · 即刻开始
# 推荐在虚拟环境中安装
pip install opencv-python==4.9.0.80
pip install opencv-contrib-python==4.9.0.80  # 可选,包含额外模块

安装完成后,在 Python 中验证:

import cv2
print(cv2.__version__)  # 输出类似 4.9.0

3.2 读取摄像头

使用 cv2.VideoCapture() 打开摄像头设备,参数 0 表示默认摄像头。通过 .read() 方法逐帧捕获。

frame (ndarray) imshow
import cv2

cap = cv2.VideoCapture(0)          # 打开默认摄像头
if not cap.isOpened():
    print("无法打开摄像头")
    exit()

while True:
    ret, frame = cap.read()        # 读取一帧
    if not ret:
        break
    cv2.imshow('Camera', frame)    # 显示帧
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

关键点: ret 布尔值表示是否成功读取;frame 是三维 numpy 数组 (H, W, 3)。

3.3 显示视频帧 & 控制循环

cv2.imshow() 创建窗口显示图像,配合 cv2.waitKey() 实现刷新和按键检测。典型帧率约 30 FPS。

cap.read imshow waitKey(1) 按键 'q' 退出 循环读取 · 直到 break
# 显示视频帧的标准循环
while True:
    ret, frame = cap.read()
    if not ret:
        print("无法获取帧,退出")
        break
    cv2.imshow('实时画面', frame)
    # 按 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
函数说明
cv2.imshow(winname, mat)在指定窗口显示图像
cv2.waitKey(delay)等待键盘输入,delay 单位毫秒;返回按键 ASCII 码
cv2.destroyAllWindows()关闭所有 OpenCV 窗口

3.4 保存图像 (截图)

使用 cv2.imwrite() 将当前帧保存为图片文件。支持 PNG、JPG 等格式。

frame (numpy) cv2.imwrite() snapshot.jpg
# 在循环中按 's' 保存当前帧
if cv2.waitKey(1) & 0xFF == ord('s'):
    cv2.imwrite('capture.jpg', frame)
    print("图像已保存为 capture.jpg")

提示: 保存路径支持相对/路径;cv2.imwrite 返回布尔值表示是否成功。

3.5 综合实战:摄像头预览 + 截图

将以上知识点整合为一个完整的脚本:打开摄像头、实时显示、按 s 保存截图、按 q 退出。

import cv2

cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("摄像头打开失败")
    exit()

print("按 's' 保存截图,按 'q' 退出")

while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Live Camera', frame)
    key = cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('s'):
        filename = 'snapshot.jpg'
        cv2.imwrite(filename, frame)
        print(f"截图已保存: {filename}")

cap.release()
cv2.destroyAllWindows()
操作按键说明
退出程序q释放摄像头并关闭窗口
保存截图s将当前帧写入 snapshot.jpg

至此,您已掌握 OpenCV 最核心的 I/O 操作:安装、读取摄像头、显示视频帧、保存图像。下一章将深入亮度与曝光控制。