我有两个具有透明背景的类似蒙版图像。我想获得图像差异,并期望它与图像相似时一样低。
但是结果显示在看起来相同的透明区域上有巨大的差异。
(白色表示差异)
diff_res = ImageChops.difference(lenna1, lenna2).convert('RGB')
我在某些网站上检查了lenna1和lenna2的图像差异,它说图像只是相同的,只是边界上的差异很小。
然后,我怀疑alpha通道值并将lenna1,lenna2转换为“ RGB”。它显示一个人的背景为黑色,而另一个人的背景为白色。
lenna1 = Image.open('lenna1.png')
lenna2 = Image.open('lenna2.png')
converted_lenna1 = lenna1.convert('RGB')
converted_lenna2 = lenna2.convert('RGB')
现在我知道convert()将透明区域默认设置为黑色。但是我还是不明白。
*我还使用.putalpha()测试了相同的alpha级别
感谢您阅读此问题。
两幅图像都具有透明性,只是一个图像中的白色像素变为透明,而另一个像素中的黑色像素变为透明。换句话说,透明像素的基本颜色在一个图像中是黑色,而在另一图像中是白色。您看不到差异,因为它们是透明的!
这是lenna1
在左侧删除了alpha层,然后在右侧删除了alpha层本身的方法:
这是lenna2
在左侧删除了alpha层,然后在右侧删除了alpha层本身的方法:
您可以通过找到所有透明像素并使它们变为白色来使它们相同:
# Load the image and make into Numpy array
rgba = np.array(Image.open('lena2.png'))
# Make image transparent white anywhere it is transparent
rgba[rgba[...,-1]==0] = [255,255,255,0]
# Make back into PIL Image and save
Image.fromarray(rgba).save('result.png')
如果要使透明像素显示为蓝色,以便可以看到它们进行测试,请使用:
rgba[rgba[...,-1]==0] = [0,0,255,255]
如果安装了ImageMagick,则可以在终端中强制所有透明像素变为您选择的颜色,例如洋红色。
magick lenna1.png -background magenta -alpha background result.png
这通常意味着您可以通过将所有透明像素设置为黑色来改善PNG压缩并减小PNG文件的大小,因此,与透明像素都是完全不同的颜色相比,图像的压缩效果可能要好得多:
magick image.png -background black -alpha background result.png
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句