彩色图像拆分与合并 外面的世界很精彩,很缤纷,很鲜艳,很五颜六色...... 通常我们拍摄的图片都是彩色的,即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) 上述代码比较简单,先将源图片进行拆分,再对其进行融合,即要得到下面的结果,可以看出,两张图片是一样一样的。 |
|
来自: pythonjava学习 > 《python图像处理》