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

相关推荐
counting money38 分钟前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
坚持学习前端日记1 小时前
Python SQLAlchemy ORM 从0到1精通实战手册(基础到复杂高阶)
数据库·python·oracle
北斗落凡尘2 小时前
LangGraph 入门实战(11)--输出模式
后端·python·langchain
雪碧聊技术2 小时前
安装Python(保姆级教程)
python·版本更新·python下载
++==2 小时前
JSON和Python的 四种核心容器
python·json
show4333 小时前
2026微信小程序视频转文字多语种识别引擎技术选型:22种方言25种外语挑战
微信小程序·小程序·音视频
张龙6875 小时前
uv 全面指南:比 pip 快 100 倍的 Python 包管理器,从安装到团队落地
后端·python
诺....5 小时前
mkv转mp4并将字幕和音频烧进去
音视频
@HNUSTer5 小时前
Python数据可视化科技图表绘制系列教程(八)
python·数据可视化·科技论文·专业制图·科研图表
OH_TPC5 小时前
HarmonyOS APP开发---“股动力“实时行情App,需要用到这个库
华为·音视频·harmonyos·鸿蒙