在处理图像的过程中,我们经常需要将图像进行通道分离,目的是获取某通道特有的信息。
在OpenCV中,使用split()函数即可实现,如果图像是RGB模型,则返回值为B\G\R,如果是HSV模型则返回值为H\S\V。官方文档地址
使用方法:b,g,r=cv2.split(RGB_Image)
与之相对应的将单通道进行融合我们需要cv2.merge([R,G,B])函数
import cv2
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (12.0, 10.0)
#第二个参数>0原图,=0灰度图,<0带alpha通道
RGB_Image=cv2.imread('cartoon.png',1)
b,g,r=cv2.split(RGB_Image)
#注意在opencv中为BGR,利用matplotlib显示需要转换
#使用merge函数将其通道进行融合
RGB_Image=cv2.merge([r,g,b])
#显示各通道信息
plt.subplot(141)
plt.imshow(RGB_Image,'gray')
plt.title('RGB_Image')
plt.subplot(142)
plt.imshow(r,'gray')
plt.title('R_Channel')
plt.subplot(143)
plt.imshow(g,'gray')
plt.title('G_Channel')
plt.subplot(144)
plt.imshow(b,'gray')
plt.title('B_Channel')
plt.show()
效果opencv图像通道分离与融合
上面的单通道信息在图像处理中经常用到,比如单通道的互相加减会得到某些颜色特征信息。比如我们稍作修改来提取少女信息
import cv2
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (12.0, 10.0)
#第二个参数>0原图,=0灰度图,<0带alpha通道
RGB_Image=cv2.imread('cartoon.png',1)
b,g,r=cv2.split(RGB_Image)
#注意在opencv中为BGR,利用matplotlib显示需要转换
#使用merge函数将其通道进行融合
RGB_Image=cv2.merge([r,g,b])
#显示各通道信息
plt.subplot(131)
plt.imshow(RGB_Image,'gray')
plt.title('RGB_Image')
plt.subplot(132)
#用r-g主要是源图像中少女部分主要为红色
r_g=r-g
plt.imshow(r_g,'gray')
plt.title('R_channel-G_channel')
#阈值处理,滤去干扰
ret,th=cv2.threshold(r_g,50,255,cv2.THRESH_BINARY)
plt.subplot(133)
plt.imshow(th,'gray')
plt.title('threshold_image')
plt.show()
效果利用通道来提取特征