编程 | 从RGBA图片格式理解波段

编程 | 从RGBA图片格式理解波段
ytkzRGBA格式
RGBA是一种色彩空间的模型,由RGB色彩空间和Alpha通道组成。RGBA代表红、绿、蓝和Alpha通道。 RGB是RGBA采用的颜色,它可以属于任何一种RGB色彩空间。而艾德文·卡特姆和匠白光在1971至1972年间提出的Alpha参数使得Alpha渲染和Alpha合成变得可能。
RGBA,更进一步的展开
简单的来说,RGBA格式比RGB多了一个Alpha通道,并且通过这个通道来控制整张图片的透明度,alpha通道一般用作不透明度参数。以我们的公众号的头像为例,如下图。
观察上图,可以发现,RGBA图片和RGB的最大区别在于,RGBA的背景值是透明的。RGB格式下,我们的公众号头像如下:
RGBA格式的好处在于,可以利用背景值为透明的特点,与其他图片进行相加。通俗易讲的来说,RGBA格式是在‘抠图’的必不可少的一步。换个说法,RGBA格式下的图片的背景值,是虚的,而RGB格式的图片的背景值,是实的。
RGBA格式在遥感中有什么应用呢?
最为常见的一个应用是在webgis中:缩略图的可视化。比如你在欧空局、USGS下载数据时,点击数据浏览,看看数据长什么样子,这时候,你看到的数据的缩略图就是RGBA格式,因为它的背景值是透明的,没有遮挡住底图。
PYTHON 读取RGBA格式的图片
RGBA格式一般是PNG图片、WEBP图片。
在python中把RGBA格式文件,读取到内存中,其中是一种方法如下:
import numpy as np
from PIL import Image
file = r'1.png' #这个文件是我们的公众号头像
img = Image.open(file)
img_arr = np.array(img)
分析上面的img_arr对象,如下:
img_arr是一个大小为200x200x4的矩阵。
RGBA格式的图片转RGB
img_arr是一个大小为200x200x4的矩阵。只要把img_arr第四个波段舍弃,只保留前三个波段,重新保存为新的文件就是RGB格式。
代码如下:
import numpy as np
from PIL import Image
file = 'xx.png'
outfile = 'rgb.png'
img = Image.open(file)
img_arr = np.array(img)
new_arr = img_arr[:, :, :3] # 第四个波段舍弃
gray_im = Image.fromarray(new_arr, mode='RGB')
gray_im.save(outfile)
好像出了问题,背景是黑色不是白色。这时只要把new_arr中的0值替换为255,就可以把黑色转为白色了,具体如下:
outfile = 'rgb2.png'
img = Image.open(self.file)
img_arr = np.array(img)
new_arr = img_arr[:, :, :3]
# 把new_arr中的0值替换为255
new_arr[new_arr == 0] = 255
gray_im = Image.fromarray(new_arr, mode='RGB')
gray_im.save(outfile)
小结
下一篇文章分享,怎么由RGB转RGBA,编写代码,实现两个目的:
1.将普通图片转为RGBA格式图片
2.Landsat9影像转为RGBA格式图片
文章最后展示一下landsat9影像在巢湖的RGBA可视化.