第3章 OpenCV入门

读取图片 · 显示图片 · 保存图片 · 读取视频流 · 显示视频流

OpenCV(Open Source Computer Vision Library)是计算机视觉领域最流行的开源库。本章将带你快速掌握 OpenCV 的基本 I/O 操作:从磁盘读取图像、在窗口中显示、保存结果,以及处理视频流。这些操作是所有实时滤镜应用的基石。

读取图像 显示图像 保存图像 读取视频流 显示视频流 逐帧处理

3.1 读取图片

使用 cv2.imread() 函数加载图像。支持常见格式(PNG, JPEG, BMP 等)。第二个参数控制颜色模式:cv2.IMREAD_COLOR(默认,BGR)、cv2.IMREAD_GRAYSCALE(灰度)、cv2.IMREAD_UNCHANGED(含 Alpha 通道)。

import cv2

# 读取彩色图像 (BGR)
img = cv2.imread('example.jpg', cv2.IMREAD_COLOR)

# 读取灰度图像
gray = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)

# 读取含透明通道的图像
rgba = cv2.imread('icon.png', cv2.IMREAD_UNCHANGED)

3.2 显示图片

cv2.imshow() 在窗口中显示图像。第一个参数是窗口名称,第二个是图像矩阵。配合 cv2.waitKey() 和 cv2.destroyAllWindows() 控制显示时长。

cv2.imshow('My Image', img)
cv2.waitKey(0)          # 等待任意按键
cv2.destroyAllWindows() # 关闭所有窗口
图像矩阵 (H x W x C) imshow 窗口渲染 屏幕 显示

3.3 保存图片

cv2.imwrite() 将图像矩阵写入文件。格式由扩展名自动推断。返回布尔值表示是否成功。

success = cv2.imwrite('output.png', img)
if success:
    print("图像保存成功")
else:
    print("保存失败,请检查路径或权限")

3.4 读取视频流

使用 cv2.VideoCapture() 打开摄像头(传入设备索引,如 0)或视频文件(传入文件路径)。通过 .read() 逐帧获取图像。

cap = cv2.VideoCapture(0)          # 打开默认摄像头
# cap = cv2.VideoCapture('video.mp4')  # 或打开视频文件

while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 对 frame 进行处理(滤镜等)
    cv2.imshow('Camera', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

3.5 显示视频流

视频流本质是快速连续显示图像帧。在循环中调用 cv2.imshow() 并配合 cv2.waitKey(1) 控制帧率。常用技巧:

视频源 读取帧 滤镜处理 显示 循环直到用户退出或视频结束

3.6 综合示例:图片与视频基础操作

下表总结了核心函数及其用途:

函数用途关键参数
cv2.imread()读取图像文件文件路径, 颜色模式
cv2.imshow()在窗口显示图像窗口名, 图像矩阵
cv2.imwrite()保存图像到文件文件名, 图像矩阵
cv2.VideoCapture()打开摄像头或视频文件设备索引/文件路径
cap.read()读取下一帧返回 (ret, frame)
cv2.waitKey()等待按键 / 刷新窗口延迟毫秒数

将上述知识点组合,即可构建一个简单的实时滤镜流水线。后续章节将在此基础上添加各种滤镜效果。