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()

相关推荐
const_qiu6 分钟前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
估值探索者1 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
田里的水稻1 小时前
PyTorch_Dataloader\TensorBoard---数据加载与可视化
人工智能·pytorch·python·神经网络·机器学习
Dmz丶1 小时前
前端转 AI 100 天 Day 27:Docker 容器化——从“我电脑能跑“到“到处能跑“
python
卿卿的产品经理日记2 小时前
【AI产品经理实战】Day 38|try-except 踩坑实录:报错是数据
人工智能·笔记·python·学习·产品经理
全栈练习生2 小时前
文档智能与实践
python·ai
隐擎fox2 小时前
深入 Android 移动端风控与协议层对抗:内核级虚拟环境检测、网络堆栈特征伪装与住宅 IP 协同实战
android·网络·python·网络协议·tcp/ip
“AI国潮设计-小江”2 小时前
【AIGC实战】Python+SDXL批量生成「潮汕英歌舞冰淇淋蛋糕&红桃粿咖啡」IP,固定角色形象批量出甜品商业效果图
开发语言·人工智能·python·prompt·aigc
Merrill_hh3 小时前
Python环境搭建
python
用户019027581613 小时前
如何用 Python 回测布林带突破策略?
python