python+opencv图像处理(三)
彩色图像拆分与合并
外面的世界很精彩,很缤纷,很鲜艳,很五颜六色......
通常我们拍摄的图片都是彩色的,即RGB图像。自然界中的绝大多数颜色也都可以看作是由红(Red)、绿(Green)、蓝(Blue)三种颜色组合而成。
在图像处理中把R、G、B看作是三个通道,可以把一幅彩色图像的三个通道拆分出来,也可以将拆分出来的三个通道合并回去。
1、RGB拆分三通道
如下图所示,第一张为美女lena的原图,后面三张是拆分过的三通道的图像。
你会发现,怎么显示出来都是灰度图像呢,没错,实验做出来就是这个样子的。
源代码如下:
import cv2
src = cv2.imread('E:/image/le.jpg')
b,g,r=cv2.split(src)
cv2.imshow("src",src)
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
cv2.waitKey(0)
第一行,导入opencv包
第二行,读入图片
第三行,拆分三通道
后面四行,显示源图片,三通道的图片
从代码你会发现,其实就是用了opencv的函数split(),来对彩色图像进行拆分。
但是要注意一点哦,拆分出来的三通道顺序是b,g,r,而不是我们认为的顺序R,G,B。
2、融合各通道颜色
上图好像不太好区分到底哪张图片是哪个通道的,来看看下图吧。
各通道颜色是不是很清晰,很明显,看一眼便知。
但这只是合并进去的颜色哦,看代码可知。
import cv2
import numpy as np
src = cv2.imread('E:/image/le.jpg')
b,g,r=cv2.split(src)
zeros = np.zeros(src.shape[:2],dtype="uint8")
b=cv2.merge([b,zeros,zeros])
g=cv2.merge([zeros,g,zeros])
r=cv2.merge([zeros,zeros,r])
cv2.imshow("src",src)
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
第一行,导入opencv包
第二行,导入numpy包,numpy是比较著名的一个包,常用于科学计算等
第三行,读入图片
第四行,拆分图片
第五行,创建与源图片大小相同的数组,全部设置为0
第六、七、八行,是融合三通道回RGB图片,因为只想分别显示各通道的图片,所以除了要显示的通道外,其余两个通道均用0。
后四行,显示图片
3、彩色图像的融合
上幅图片其实已说明了如何进行三通道的融合,就是用merge()函数。
import cv2
src = cv2.imread('E:/image/le.jpg')
b,g,r=cv2.split(src)#拆分
dst=cv2.merge((b,g,r))#融合
cv2.imshow("src",src)
cv2.imshow("dst”,dst)
上述代码比较简单,先将源图片进行拆分,再对其进行融合,即要得到下面的结果,可以看出,两张图片是一样一样的。