本篇来看一下opencv的两个函数通道cv2.split和通道cv2.merge
执行脚本,得到下面三幅图像: 蓝色通道:
绿色通道:
红色通道:
奇怪,为什么分离出的图像颜色都是灰色的呢?不应该是蓝色通道是蓝色,绿色通道是绿色,红色通道是红色吗? 原来,cv2.split函数分离出的B、G、R是单通道图像,我们可以增加下面两行代码来验证一下:
print "image shape:",image.shape print "single channal shape:",R.shape得到结果如下:
image shape: (370, 690, 3) single channal shape: (370, 690)结果说明,原图(彩色图像)是370*690的三通道图像。而经过cv2.split之后,每个通道是370*690的单通道图像。
其实,我最开始想像的cv2.split图像是如下的样子:
蓝色通道(其它通道分量值为0):
绿色通道(其它通道分量值为0):
红色通道(其它通道分量值为0):
原来的上面的图像是三通道图像,只是在cv2.split分离出的图像基础上,扩展另外两个通道,但另外两个通道值为0,而得到上面的这样的图像。代码如下:
# 生成一个值为0的单通道数组 zeros = np.zeros(image.shape[:2], dtype = "uint8") # 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充 cv2.imshow("Blue", cv2.merge([B, zeros, zeros])) cv2.imshow("Green", cv2.merge([zeros, G, zeros])) cv2.imshow("Red", cv2.merge([zeros, zeros, R])) cv2.waitKey(0)cv2.split函数分离得到各个通道的灰度值(单通道图像)。cv2.merge函数是合并单通道成多通道(不能合并多个多通道图像)。