1.通过数组索引拆分通道
OpenCV中BGR格式的图像是一个三维数组,可用数组的索引操作拆分3个色彩通道,示例代码如下。
test2-10.py:通过数组索引拆分通道
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读图像,将其尺寸减小为原来的1/2
cv2.imshow('lena',img) #显示原图像
b=img[:,:,0] #获得B通道图像
g=img[:,:,1] #获得G通道图像
r=img[:,:,2] #获得R通道图像
cv2.imshow('lena_B',b) #显示B通道图像
cv2.imshow('lena_G',g) #显示G通道图像
cv2.imshow('lena_R',r) #显示R通道图像
cv2.waitKey(0)
2.使用cv2.split()函数拆分通道
cv2.split()函数可以用于拆分通道,示例代码如下。
test2-11.py:使用cv2.split()函数拆分通道
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读图像,将其尺寸减小为原来的1/2
cv2.imshow('lena',img) #显示原图像
b,g,r=cv2.split(img) #按通道拆分图像
cv2.imshow('lena_B',b) #显示B通道图像
cv2.imshow('lena_G',g) #显示G通道图像
cv2.imshow('lena_R',r) #显示R通道图像
cv2.waitKey(0)
程序运行结果与图2-6所示的相同。cv2.split()函数拆分通道的效率不如数组索引,所以在处理较大图像时应优先考虑使用数组索引来拆分通道。
3.合并图像通道
cv2.merge()函数可将3通道图像合并,其基本格式如下。
img=cv2.merge([b,g,r])
其中,变量img保存生成的图像,b、g、r是3个单通道图像,依次将它们作为B、G和R通道的图像进行合并,示例代码如下。
test2-12.py:合并图像通道
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_REDUCED_COLOR_2) #读图像,将其尺寸减小为原来的1/2
cv2.imshow('lena',img) #显示原图像
b,g,r=cv2.split(img) #按通道拆分图像
rgb=cv2.merge([r,g,b]) #按新顺序合并
gbr=cv2.merge([g,b,r]) #按新顺序合并
cv2.imshow('lena_RGB',rgb) #显示合并图像
cv2.imshow('lena_GBR',gbr) #显示合并图像
cv2.waitKey(0)