
2.5.1 通道拆分
在OpenCV中,既可以通过索引的方式拆分通道,也可以通过函数的方式拆分通道。
1.通过索引拆分
通过索引的方式,可以直接将各个通道从图像内提取出来。例如,针对OpenCV内的BGR图像img,如下语句分别从中提取了B通道、G通道、R通道。

【例2.16】编写程序,演示图像通道拆分及通道值改变对彩色图像的影响。
根据题目要求,编写代码如下:

本例实现了通道拆分和通道值改变:
● 语句b=lena[:,:,0]获取了图像img的B通道。
● 语句g=lena[:,:,1]获取了图像img的G通道。
● 语句r=lena[:,:,2]获取了图像img的R通道。
● 语句lena[:,:,0]=0将图像img的B通道值设置为0。
● 语句lena[:,:,1]=0将图像img的G通道值设置为0。
运行上述程序,得到如图2-21所示的结果,其中:
● 图2-21(a)是原始图像lena。
● 图2-21(b)是原始图像lena的B通道图像b。
● 图2-21(c)是原始图像lena的G通道图像g。
● 图2-21(d)是原始图像lena的R通道图像r。
● 图2-21(e)是将图像lena中B通道值置为0后得到的图像。
● 图2-21(f)是将图像lena中B通道值、G通道值均置为0后得到的图像。
由于本书为黑白印刷,所以为了更好地观察运行效果,请大家亲自上机验证程序。

图2-21 【例2.16】程序的运行结果
2.通过函数拆分
函数cv2.split()能够拆分图像的通道。例如,可以使用如下语句拆分彩色BGR图像img,得到B通道图像b、G通道图像g和R通道图像r。

上述语句与如下语句是等价的:

【例2.17】编写程序,使用函数cv2.split()拆分图像通道。
根据题目要求,编写代码如下:


运行上述程序,得到如图2-22所示的三个通道图像,其中:
● 图2-22(a)是B通道图像b。
● 图2-22(b)是G通道图像g。
● 图2-22(c)是R通道图像r。

图2-22 三个通道的图像