使用python中的pil库使图像中的遮罩区域透明

k2fxgqgv  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(330)

我在转换由蒙版数组生成的图像时遇到问题。此图像最初处于模式“l”。但是,我将其转换为模式“p”,并为其提供调色板,因此灰度图像具有一些伪彩色。现在的问题是,遮罩区域仍然存在,并且不透明,并且在调色板中实际获得的值与未遮罩区域中的最低值相同,这似乎很奇怪。我试图以某种方式将图像转换为“rgba”或“pa”,以便使这些没有数据的区域透明。然而,这一转变没有成功。所以,我有点困惑pil库如何处理屏蔽数组。以下是我的python代码:

img = Image.load("./dem.png")
img_cleaned = np.where(img<1e-20,-999,img) #fields with no data is given a very low value
img_cleaned = np.ma.masked_where(img_cleaned==(-999),img_cleaned) #fields where no data is available are removed
img_normalized = (img_cleaned - np.min(img_cleaned)) / (np.max(img_cleaned) - np.min(img_cleaned)) * 255.0 #normalize image to 0-255
img_grey = Image.fromarray(img_normalized)

# create random color palette

pal = np.zeros(3*256, int)
pal[30:-90] = np.mgrid[0:256:51, 0:256:51, 0:256:51].ravel('F')

# convert

img_color = img_grey.convert("P")
img_color.putpalette(np.uint8(pal).tolist())

我尝试了不同的方法来设置alpha通道。 Image.putalpha() 只能为整个图像设置alpha,不能在模式“p”下工作。我还尝试将其转换为“pa”模式,并在自定义调色板中添加alpha通道。然而,这个调色板的长度必须是768,所以我不能在那个里添加一些东西。也许你能帮我找到正确的方法?问题在于屏蔽数组没有被pil库真正识别。但是,当绘制规范化数组时,它看起来非常像我想要的,但是由于web应用程序中的应用程序,我无法将matplot保存到文件中,因此无法仅保存数组。我想把图像作为一个对象,以后我可以把它解码成字节。您可以在此处看到问题:

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题