4.5 alpha通道
在RGB色彩空间三个通道的基础上,还可以加上一个A通道,也叫alpha通道,表示透明度。这种4个通道的色彩空间被称为RGBA色彩空间,PNG图像是一种典型的4通道图像。alpha通道的赋值范围是[0, 1],或者[0, 255],表示从透明到不透明。
【例4.12】编写一个程序,分析alpha通道的值。
为了方便观察,本例中使用一个随机数组来模拟图像,进行观察。
根据题目要求,设计程序如下:
import cv2 import numpy as np img=np.random.randint(0,256, size=[2,3,3], dtype=np.uint8) bgra = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA) print("img=\n", img) print("bgra=\n", bgra) b, g, r, a=cv2.split(bgra) print("a=\n", a) a[:, :]=125 bgra=cv2.merge([b, g, r, a]) print("bgra=\n", bgra)
在本例中,使用语句bgra=cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)将img从BGR色彩空间转换到BGRA色彩空间。在转换后的BGRA色彩空间中,A是alpha通道,默认值为255。
接下来,分别使用打印语句打印原始图像img的值和转换后的图像bgra的值。
然后,使用语句a[:, :]=125将从bgra中提取的alpha通道的值设定为125,并使用语句bgra=cv2.merge([b, g, r, a])构建一个新的bgra图像。在本步骤中,使用cv2.merge()函数将新的alpha通道与原有的BGR通道进行合并,得到一个新的图像。从另外一个角度理解就是,本步骤实现了将bgra图像中alpha通道的值更改为125。
最后,使用print语句显示重构后的bgra图像。
运行程序,结果如下所示。
img= [[[141 62 75] [ 64 55238] [ 10167220]] [[ 19 29 93] [234219238] [108 33 99]]] bgra= [[[141 62 75255] [ 64 55238255] [ 10167220255]] [[ 19 29 93255] [234219238255] [108 33 99255]]] a= [[255255255] [255255255]] bgra= [[[141 62 75125] [ 64 55238125] [ 10167220125]] [[ 19 29 93125] [234219238125] [108 33 99125]]]
【例4.13】编写一个程序,对图像的alpha通道进行处理。
根据题目要求,设计程序如下:
import cv2 img=cv2.imread("lenacolor.png") bgra = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA) b, g, r, a=cv2.split(bgra) a[:, :]=125 bgra125=cv2.merge([b, g, r, a]) a[:, :]=0 bgra0=cv2.merge([b, g, r, a]) cv2.imshow("img", img) cv2.imshow("bgra", bgra) cv2.imshow("bgra125", bgra125) cv2.imshow("bgra0", bgra0) cv2.waitKey() cv2.destroyAllWindows() cv2.imwrite("bgra.png", bgra) cv2.imwrite("bgra125.png", bgra125) cv2.imwrite("bgra0.png", bgra0)
在本例中,首先从当前目录下读取文件lenacolor.png,然后将其进行色彩空间变换,将其由BGR色彩空间转换到BGRA色彩空间,得到bgra,即为原始图像lena添加alpha通道。
接下来,分别将提取得到的alpha通道的值设置为125、0,并将新的alpha通道与原有的BGR通道进行组合,得到新的BGRA图像bgra125、bgra0。
接着,分别显示原始图像、原始BGRA图像bgra、重构的BGRA图像bgra125和bgra0。
最后,将3个不同的BGRA图像保存在当前目录下。
运行程序,显示的图像如图4-7所示。图中:
图4-7 【例4.13】程序的运行结果
● 图(a)是原始图像lena。
● 图(b)是由原始图像lena通过色彩空间转换得到的图像bgra,该图像内alpha通道的值是默认值255。
● 图(c)是将图像bgra中alpha通道值设置为0得到的。
● 图(d)是将图像bgra中alpha通道值设置为125得到的。
从图中可以看到,各个图像的alpha通道值虽然不同,但是在显示时是没有差别的。
除此以外,程序还分别保存了不同alpha通道值的图像。打开当前文件夹,可以看到当前文件夹下保存了三幅图像,如图4-8所示,其中:
图4-8 保存的图像
● 图(a)是保存的图像bgra,该图像由原始图像lena通过色彩空间转换得到,该图像内alpha通道的值是默认值255。
● 图(b)是保存的图像bgra125,该图像是将图像bgra中alpha通道值设置为125得到的。
● 图(c)是保存的图像bgra0,该图像是将图像bgra中alpha通道值设置为0得到的。需要注意,在图像bgra0处于预览模式时,看起来可能是一幅黑色的图像,将其打开后就会看到它实际上是纯色透明的。