OpenCV 入门:图像与视频的基础操作

文章目录


一、环境准备与版本检查

在开始前,需要安装 OpenCV

安装 OpenCV 命令:

shell 复制代码
pip install opencv-python
pip install opencv-contrib-python

导入库并检查版本,确保环境配置正确:

python 复制代码
import cv2
print("OpenCV版本:", cv2.__version__)

说明
cv2.__version__ 返回当前安装的 OpenCV 版本号,便于确认环境兼容性。


二、图像读取与基本属性

1. 读取图像

OpenCV 使用 cv2.imread() 读取图像文件,支持多种格式(如 JPG、PNG 等)。

python 复制代码
a = cv2.imread(r"picture_1.jpg")

方法参数解析

  • filename:图像文件路径(字符串)。
  • flags:读取模式,可选参数,常用值有:
    • cv2.IMREAD_COLOR(默认):读取为彩色图像(3通道)。
    • cv2.IMREAD_GRAYSCALE(或 0):读取为灰度图像(单通道)。

2. 显示图像

使用 cv2.imshow() 显示图像窗口,cv2.waitKey() 等待键盘输入,cv2.destroyAllWindows() 关闭所有窗口。

python 复制代码
cv2.imshow("tu", a)
cv2.waitKey(0)
cv2.destroyAllWindows()

方法参数解析

  • cv2.imshow(winname, mat)
    • winname:窗口名称(字符串)。
    • mat:要显示的图像矩阵。
  • cv2.waitKey(delay)
    • delay:等待时间(毫秒),若为 0 则无限等待直到按键。
    • 返回值:按键的 ASCII 码(如 ESC 键对应 27)。
  • cv2.destroyAllWindows():关闭所有由 OpenCV 创建的窗口。

3. 获取图像属性

图像在 OpenCV 中以 NumPy 数组形式存储,可通过以下属性获取基本信息:

python 复制代码
print("图像形状:", a.shape)  # (高度, 宽度, 通道数)
print("图像数据类型:", a.dtype)  # 通常是 uint8
print("图像大小:", a.size)  # 像素总数 = 高度 × 宽度 × 通道数

三、图像处理基础操作

1. 图像裁剪

通过数组切片实现图像区域的裁剪:

python 复制代码
b = a[400: 800, 400: 800]
cv2.imshow("piece of picture", b)

说明 :切片格式为 [y_start:y_end, x_start:x_end],注意 OpenCV 中坐标顺序为 (y, x)

2. 通道分离与合并

彩色图像由 B(蓝)、G(绿)、R(红)三个通道组成。OpenCV 默认以 BGR 顺序存储图像。

通道分离:
python 复制代码
# 方法一:直接切片
a1 = a[:, :, 0]  # B通道
a2 = a[:, :, 1]  # G通道
a3 = a[:, :, 2]  # R通道

# 方法二:使用 cv2.split()
b, g, r = cv2.split(a)
通道合并:
python 复制代码
img = cv2.merge((b, g, r))

方法参数解析

  • cv2.split(img):将多通道图像拆分为单通道数组列表。
  • cv2.merge(mv):将多个单通道数组合并为多通道图像,参数为通道元组(如 (b, g, r))。

3. 通道操作示例

通过置零某些通道实现颜色过滤效果:

python 复制代码
a_new = a.copy()
a_new[:, :, 1] = 0  # 将 G 通道置零
a_new[:, :, 2] = 0  # 将 R 通道置零
# 此时图像仅保留蓝色分量

四、视频处理基础

OpenCV 支持从视频文件或摄像头实时捕获视频流。

1. 视频捕获对象

python 复制代码
video_capture = cv2.VideoCapture(r"video1.mp4")  # 从文件读取
# video_capture = cv2.VideoCapture(0)  # 从默认摄像头读取

方法参数解析

  • cv2.VideoCapture(index/filename)
    • index:摄像头设备编号(0 为默认摄像头)。
    • filename:视频文件路径。

2. 视频帧读取与处理

python 复制代码
while True:
    ret, frame = video_capture.read()  # 读取一帧
    if not ret:
        break
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 转换为灰度
    cv2.imshow("video1", frame)
    if cv2.waitKey(60) == 27:  # 每帧显示约 60ms,按 ESC 退出
        break

方法参数解析

  • video_capture.read():返回是否成功(ret)和当前帧图像(frame)。
  • cv2.cvtColor(src, code):颜色空间转换:
    • src:输入图像。
    • code:转换代码,如 cv2.COLOR_BGR2GRAY(BGR 转灰度)。

3. 释放资源

处理完成后必须释放视频捕获对象并关闭窗口:

python 复制代码
video_capture.release()
cv2.destroyAllWindows()

相关推荐
C嘎嘎嵌入式开发2 小时前
语言学:自然语言处理 (NLP) 的底层逻辑
人工智能·python·自然语言处理·nlp
好记忆不如烂笔头abc2 小时前
安装python新版本
开发语言·人工智能·python
shuishen492 小时前
视频尾帧提取功能实现详解 - 纯前端Canvas API实现
前端·音视频·尾帧·末帧
红队it2 小时前
【数据分析】基于Spark链家网租房数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
java·数据库·hadoop·分布式·python·数据分析·spark
小鸡吃米…2 小时前
Python的人工智能——无监督学习:聚类
人工智能·python·学习
TheSumSt2 小时前
Python丨课程笔记Part5:更多进阶部分
笔记·python·microsoft
隐语SecretFlow2 小时前
隐语SML0.1.0版本发布!SPU开源机器学习Python算法库
python·算法·机器学习
Lueeee.2 小时前
如果在调试音频的时候(音频标准编码是aac),发现声音有异常,比如有电流滋滋或者其他不正常的声音该怎么去排查
音视频·aac
周胡杰2 小时前
AudioPlayerManager 音视频单例播放管理类操作文档附加案例
华为·音视频·harmonyos·数据持久化·鸿蒙音视频