OpenCV-图像通道拆分与合并(以碇真嗣为例)

由 天空David 发布

常见的图像大多包含RGB三个通道,即图像是一个三维数组,最后一维是通道信息,通道的顺序为R,G,B。

OpenCV默认是按照B,G,R的顺序读取通道信息的,对图像通道的拆分和合并实际上是针对图像的通道所在维度进行操作。

通过Numpy创建0值数组,构建图像,并通过索引拆分通道。针对图像变量img,通过img[:,:,0]可以获得B通道,img[:,:,1]可以获得G通道,img[:,:,2]可以获得R通道。把0索引通道值设为255后,输出的blue图像为纯蓝色, 把1索引通道值设为255后,输出的green图像为纯绿色,把2索引通道值设为255后,输出的red图像为纯红色。通过案例,可以查看到各个通道对图像的表现影响。

生成300×300为三通道值为0的图片,进行通道拆分演示。代码如下:

import numpy as np
import cv2
# 蓝色通道值 #图像三通道初始值都为,将OpenCV中0号通道值设置为255,0号通道表示B通道,以下类似
blue = np.zeros((300, 300, 3), dtype=np.uint8)
blue[:, :, 0] = 255
cv2.imshow("blue", blue)
# 绿色通道值
green = np.zeros((300, 300, 3), dtype=np.uint8)
green[:, :, 1] = 255
cv2.imshow("green", green)
# 红色通道值
red = np.zeros((300, 300, 3), dtype=np.uint8)
red[:, :, 2] = 255
cv2.imshow("red", red)
# 释放窗口
cv2.waitKey()
cv2.destroyAllWindows()

1.png

1.使用索引对通道进行拆分,再使用merge函数进行通道合并。

读取图片,进行通道拆分。代码如下:

import numpy as np
import cv2

# 读取图像
img = cv2.imread("./pic/webp.jpg")
# 根据索引获取各个通道的值
blue = img[:, :, 0]
green = img[:, :, 1]
red = img[:, :, 2]
# 将各个通道的值通过np.hstack函数水平拼接
res = np.hstack((blue,green,red))
cv2.imshow("res",res)
# 将img图像赋值给blue1,将0索引通道值设置为0
blue1 = img.copy()
blue1[:,:,0] = 0
# 将img图像赋值给green1,将0,1索引通道值设置为0
green1 = img.copy()
green1[:,:,0] = 0
green1[:,:,1] = 0
# 将img图像赋值给red1,将0,1,2索引通道值设置为0
red1 = img.copy()
red1[:,:,0] = 0
red1[:,:,1] = 0
red1[:,:,2] = 0
# 展示所有的
res1 = np.hstack((blue1,green1,red1))
cv2.imshow("res1",res1)
#释放窗口
cv2.waitKey()
cv2.destroyAllWindows ()

2.png

当所有三通道的所有值均为0时,图像表现为黑色。

2.使用split函数对通道进行拆分,再使用merge函数进行通道合并。代码如下:

import numpy as np
import cv2
#读取图像
img = cv2.imread("./pic/webp.jpg")
# 根据split拆分获取各个通道的值
blue,green,red = cv2.split(img)
# 将各个通道的值通过np.hstack函数水平拼接
res = np.hstack((blue,green,red))
cv2.imshow("res",res)
# 将各个通道的值通过merge函数合并
bgr = cv2.merge([blue,green,red])
rgb = cv2.merge([red,green,blue])
brg = cv2.merge([blue,red,green])
res1 = np.hstack((bgr,rgb,brg))
cv2.imshow("res1",res1)
#释放窗口
cv2.waitKey()
cv2.destroyAllWindows ()

3.png

采用merge函数进行合并时,要严格指定通道的顺序,由于OpenCV默认采用BGR顺序,所以当合并采用BGR顺序时,合并后的图像与原始图像相同,输入不同的通道顺序,合并后的图像色彩是不同的。


暂无评论

发表评论