第3章 OpenCV基础
OpenCV简介与安装 · 读取单摄像头视频流 · 显示与保存帧
3.1 OpenCV 简介与安装
OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,提供了数百种图像与视频处理函数。它支持 C++、Python、Java 等语言,在学术与工业界被广泛使用。本章聚焦 Python 接口,带你快速上手。
核心模块概览
| 模块 | 功能 |
|---|---|
| core | 基础数据结构(Mat、Point、Scalar) |
| imgproc | 图像滤波、几何变换、颜色空间转换 |
| videoio | 视频/摄像头读取与写入 |
| highgui | 窗口显示、滑动条、鼠标交互 |
| objdetect | 人脸检测、目标检测 |
安装 OpenCV
推荐使用 pip 安装,建议在虚拟环境中进行:
# 基础安装(包含 contrib 扩展模块)
pip install opencv-contrib-python
# 若只需核心模块(轻量)
pip install opencv-python
验证安装:
import cv2
print(cv2.__version__) # 例如 4.9.0
3.2 读取单摄像头视频流
使用 cv2.VideoCapture 打开摄像头(设备索引 0 表示第一个摄像头)。通过循环不断读取帧。
import cv2
cap = cv2.VideoCapture(0) # 0 代表默认摄像头
if not cap.isOpened():
print("无法打开摄像头")
exit()
while True:
ret, frame = cap.read() # ret: 布尔值, frame: 图像矩阵
if not ret:
break
# 在这里处理 frame
cv2.imshow('Camera', frame) # 显示帧
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
3.3 显示与保存帧
显示:使用 cv2.imshow(窗口名, 图像) 创建窗口并显示。配合 cv2.waitKey(delay) 刷新界面。
保存:使用 cv2.imwrite(文件名, 图像) 将帧保存为图片。支持 PNG、JPEG 等格式。
示例:按空格保存当前帧
import cv2
cap = cv2.VideoCapture(0)
frame_count = 0
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('Live', frame)
key = cv2.waitKey(1) & 0xFF
if key == ord(' '): # 空格键保存
filename = f'frame_{frame_count}.png'
cv2.imwrite(filename, frame)
print(f'保存 {filename}')
frame_count += 1
elif key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
常用图像保存格式
| 扩展名 | 特点 | 适用场景 |
|---|---|---|
| .png | 无损压缩,支持透明 | 需要高质量帧 |
| .jpg / .jpeg | 有损压缩,文件小 | 快速存储、预览 |
| .bmp | 无压缩,体积大 | 调试或中间处理 |
通过本章学习,你已经掌握了 OpenCV 的基本安装、单摄像头读取、实时显示以及帧保存。这些是构建多摄像头系统的基础砖石。