上一节讲到Opencv的通道模式,按照B通道-->G通道-->R通道顺序进行存储的。再图像处理的过程中,可以根据需要对通道进行拆分和合并
通道拆分
针对RGB图像,可以分别拆分出其R通道,G通道,B通道。再Opencv中可以通过索引直接将各个通道从图像中提出出来。例如,针对Opencv内的BGR图像img,可用如下语句进行B\G\R通道的提取:
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
接着我们查看一下,单单只有b,g,r通道的图片和原图的区别

接着我们开始尝试抽取颜色,将图片中的B,G,R颜色分别抽取,代码如下:
img = cv2.imread('D:/PixC/01.jpeg')
img[:,:,0] = 0
cv.imshow('img-b',img)
img = cv2.imread('D:/PixC/01.jpeg')
img[:,:,1] = 0
cv.imshow('img-g',img)
img = cv2.imread('D:/PixC/01.jpeg')
img[:,:,2] = 0
cv.imshow('img-r',img)
于是得到如下图

分别是抽调了绿色,蓝色和红色之后的效果图
当然除了索引,我们还可以用cv2.split()来拆分图像通道。例如,可以使用如下语句拆分彩色BGR图像img,得到通道b,g,r
b,g,r =cv2.split(img)
上述代码与接下来这段代码是对等的
b = cv2.split(img)[0]
g = cv2.split(img)[1]
r = cv2.split(img)[2]
通道合并
通道合并是通道拆分的逆过程,通过合并通道可以将三个通道的灰度图像合并成一幅彩色的图像。函数cv2.merge()可以实现通道合并。
当然,我们原模原样合并看不出差异,换个方式,原来的BGR通道换成RGB,于是我们得到了另一张色调的图,代码如下
bgr_img = cv2.merge([b,g,r])
rgb_img = cv2.merge([r,g,b])
cv2.imshow('bgr_img',bgr_img)
cv2.imshow('rgb_img',rgb_img)
调整图像大小
Opencv使用函数cv2.resize()实现对图像的缩放,代码如下
rowls,cols = img.shape[:2]
size = (int(cols*0.8),int(rowls*0.8))
img_2 = cv2.resize(img,size)
print('imgshape = ',img.shape)
print('img2shape = ',img_2.shape)
cv2.imshow('img1',img)
cv2.imshow('img2',img_2)
得到输出如下
imgshape = (346, 260, 3)
img2shape = (276, 208, 3)
图片如下

本文介绍了Python使用Opencv进行图像处理中的通道拆分和合并,详细讲解了如何提取BGR图像的R、G、B通道,并展示了通道拆分后的效果。此外,还探讨了如何通过cv2.resize()函数对图像进行缩放操作。

3374

被折叠的 条评论
为什么被折叠?



