OpenCV 图像处理基础操作指南(一)

文章目录

OpenCV 是一个强大的计算机视觉库,在图像处理领域应用广泛。本文将基于实际代码示例,介绍 OpenCV 中一些常用的图像处理基础操作,包括图像读取与显示、灰度图处理、图像切片、视频读取、颜色通道操作、图像修改以及图像缩放等内容。


一、图像的读取与显示

在 OpenCV 中,我们可以使用 cv2.imread() 函数读取图像,该函数会返回一个 NumPy 数组,存储着图像的像素值。读取后,使用 cv2.imshow() 函数显示图像,cv2.waitKey() 控制图像显示时间,最后用 cv2.destroyAllWindows() 关闭所有窗口。

python 复制代码
import cv2

a = cv2.imread('img_1.jpg')  # 读取图片
cv2.imshow('tu', a)  # 显示图片,参数分别为窗口名称和图像数据
b = cv2.waitKey(0)  # 等待用户按键,0 表示无限等待
cv2.destroyAllWindows()  # 关闭所有窗口

我们还可以查看图像的一些属性:

python 复制代码
print("图像形状(shape):", a.shape)  # 图像高、宽、通道数
print("图像数据类型(dtype):", a.dtype)  # 通常是无符号8位整数,像素值范围0-255
print("图像大小(size):", a.size)  # 总像素数,即高度×宽度×通道数

二、灰度图处理

读取灰度图可以通过在 cv2.imread() 函数中设置参数实现,参数 cv2.IMREAD_GRAYSCALE 或 0 都表示读取灰度图。读取后同样可以显示并查看其属性,也能使用 cv2.imwrite() 保存灰度图。

python 复制代码
a = cv2.imread('img_1.jpg', 0)  # 读取灰度图
cv2.imshow('tu', a)
b = cv2.waitKey(10000)
cv2.destroyAllWindows()
print('图像形状(shape):', a.shape)
print('图像数据类型(dtype):', a.dtype)
print('图像大小(size):', a.size)
cv2.imwrite('img_1_gray.jpg', a)  # 保存灰度图

三、图像切片

图像切片就是截取图像的一部分,通过对图像数组进行切片操作即可实现。

python 复制代码
a = cv2.imread('img_1.jpg')
b = a[0:500, 100:300]  # 截取图像的一部分
cv2.imshow('yuantu', a)
cv2.imshow('qiepian', b)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、视频文件读取

使用 cv2.VideoCapture() 打开视频文件或摄像头,然后通过循环逐帧读取视频,对每一帧进行处理和显示,最后释放资源。

python 复制代码
# 打开视频文件,若为摄像头则参数为 0
video_capture = cv2.VideoCapture('DSC01703.mp4')
# 检查视频是否成功打开
if not video_capture.isOpened():
    print("无法打开视频文件")
    exit()
# 循环读取视频帧
while True:
    ret, frame = video_capture.read()  # ret 表示是否成功读取帧,frame 是读取到的帧
    if not ret:
        break
    # 可在此添加对帧的处理,如转为灰度图
    # frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    cv2.imshow('Video', frame)
    # 按下 'esc' 键退出循环
    if cv2.waitKey(60) == 27:
        break
# 释放资源
video_capture.release()
cv2.destroyAllWindows()

五、颜色通道操作

1.提取 RGB 颜色通道

可以通过数组切片或 cv2.split() 函数提取图像的蓝色(B)、绿色(G)、红色(R)通道。

python 复制代码
a = cv2.imread(r'img_1.jpg')
# 数组切片提取
a1 = a[:, :, 0]  # 蓝色通道
a2 = a[:, :, 1]  # 绿色通道
a3 = a[:, :, 2]  # 红色通道
# 或使用 cv2.split() 提取
b, g, r = cv2.split(a)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.waitKey(100000)
cv2.destroyAllWindows()

需要注意的是,单个颜色通道图像显示为灰色,若要显示单通道彩色效果,可将其他通道设为 0。

python 复制代码
a = cv2.imread(r'img_1.jpg')
a_new = a.copy()
a_new[:, :, 1] = 0  # 绿色通道设为0
a_new[:, :, 2] = 0  # 红色通道设为0
cv2.imshow('result', a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.合并 RGB 颜色通道

使用 cv2.merge() 函数可以将分离的颜色通道合并成完整图像。

python 复制代码
a = cv2.imread(r'img_1.jpg')
b, g, r = cv2.split(a)
img = cv2.merge((b, g, r))
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

六、图像修改

1.图片打码

通过对图像的特定区域赋值随机像素值实现打码效果,注意赋值的矩阵大小要与目标区域一致。

python 复制代码
import numpy as np

a = cv2.imread('img_1.jpg')
a[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3))  # 打码操作
cv2.imshow('masaike', a)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.图片组合

将一张图像的部分区域复制到另一张图像的对应区域,需保证两块区域大小一致。

python 复制代码
a = cv2.imread('img_1.jpg')
b = cv2.imread('img_2.jpg')
b[20:50, 100:150] = a[50:80, 100:150]  # 图像组合
cv2.imshow('b', b)
cv2.imshow('a', a)
cv2.waitKey(0)
cv2.destroyAllWindows()

七、图像缩放

使用 cv2.resize() 函数调整图像大小,可通过指定输出大小或缩放系数来实现。

python 复制代码
a = cv2.imread('img_1.jpg')
# 方法一:指定输出大小(宽、高)
# a_new = cv2.resize(a, dsize=(200, 600))
# 方法二:指定缩放系数
a_new = cv2.resize(a, None, fx=2, fy=2)
cv2.imshow('a', a)
cv2.imshow('a_new', a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上就是 OpenCV 中一些基础的图像处理操作,这些操作是进行更复杂图像处理和计算机视觉任务的基础,希望能对大家有所帮助。

相关推荐
站大爷IP10 分钟前
Django缓存机制详解:从配置到实战应用
python
叫我:松哥20 分钟前
基于Python的实习僧招聘数据采集与可视化分析,使用matplotlib进行可视化
开发语言·数据库·python·课程设计·matplotlib·文本挖掘
站大爷IP23 分钟前
Django模型开发全解析:字段、元数据与继承的实战指南
python
居然JuRan23 分钟前
LangChain之链:解锁大模型应用开发的密钥
人工智能
赵英英俊26 分钟前
Python day37
人工智能·python·深度学习
nju_spy27 分钟前
李宏毅深度学习教程 第12-13章 对抗攻击 + 迁移学习transfer learning
人工智能·深度学习·迁移学习·黑盒攻击·南京大学·对抗攻击·领域偏移
雪兽软件37 分钟前
人工智能的20大应用
人工智能
拓端研究室40 分钟前
专题:2025财务转型与AI赋能数字化报告|附30+份报告PDF汇总下载
人工智能·pdf
JuiceFS41 分钟前
稿定科技:多云架构下的 AI 存储挑战与 JuiceFS 实践
人工智能·后端·云原生
过往入尘土1 小时前
深度学习之opencv篇
人工智能·深度学习·opencv