OpenCV 图像处理基础操作指南(一)
文章目录
- 一、图像的读取与显示
- 二、灰度图处理
- 三、图像切片
- 四、视频文件读取
- 五、颜色通道操作
- 1.提取 RGB 颜色通道
- 2.合并 RGB 颜色通道
- 六、图像修改
- 1.图片打码
- 2.图片组合
- 七、图像缩放
OpenCV 是一个强大的计算机视觉库,在图像处理领域应用广泛。本文将基于实际代码示例,介绍 OpenCV 中一些常用的图像处理基础操作,包括图像读取与显示、灰度图处理、图像切片、视频读取、颜色通道操作、图像修改以及图像缩放等内容。
一、图像的读取与显示
在 OpenCV 中,我们可以使用 cv2.imread()
函数读取图像,该函数会返回一个 NumPy 数组,存储着图像的像素值。读取后,使用 cv2.imshow()
函数显示图像,cv2.waitKey()
控制图像显示时间,最后用 cv2.destroyAllWindows()
关闭所有窗口。
import cv2a = cv2.imread('img_1.jpg') # 读取图片
cv2.imshow('tu', a) # 显示图片,参数分别为窗口名称和图像数据
b = cv2.waitKey(0) # 等待用户按键,0 表示无限等待
cv2.destroyAllWindows() # 关闭所有窗口
我们还可以查看图像的一些属性:
print("图像形状(shape):", a.shape) # 图像高、宽、通道数
print("图像数据类型(dtype):", a.dtype) # 通常是无符号8位整数,像素值范围0-255
print("图像大小(size):", a.size) # 总像素数,即高度×宽度×通道数
二、灰度图处理
读取灰度图可以通过在 cv2.imread()
函数中设置参数实现,参数 cv2.IMREAD_GRAYSCALE
或 0 都表示读取灰度图。读取后同样可以显示并查看其属性,也能使用 cv2.imwrite()
保存灰度图。
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) # 保存灰度图
三、图像切片
图像切片就是截取图像的一部分,通过对图像数组进行切片操作即可实现。
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()
打开视频文件或摄像头,然后通过循环逐帧读取视频,对每一帧进行处理和显示,最后释放资源。
# 打开视频文件,若为摄像头则参数为 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)通道。
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。
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()
函数可以将分离的颜色通道合并成完整图像。
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.图片打码
通过对图像的特定区域赋值随机像素值实现打码效果,注意赋值的矩阵大小要与目标区域一致。
import numpy as npa = 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.图片组合
将一张图像的部分区域复制到另一张图像的对应区域,需保证两块区域大小一致。
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()
函数调整图像大小,可通过指定输出大小或缩放系数来实现。
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 中一些基础的图像处理操作,这些操作是进行更复杂图像处理和计算机视觉任务的基础,希望能对大家有所帮助。