ImageChops.difference 不适用于简单的 png 图像

Tim*_*Tim 4 python ubuntu png python-imaging-library python-3.x

我正在创建一个简单的脚本来检查图像是否相同或不同。

我的代码适用于 jpg 文件,但不适用于 png 文件。

出于某种原因,我下面的代码认为下面的 png:

在此处输入图片说明

和下面的png一样

在此处输入图片说明

from PIL import Image, ImageChops


img1 = Image.open('./1.png')
img2 = Image.open('./2.png')

img3 = Image.open('./A.jpg')
img4 = Image.open('./B.jpg')
diff1 = ImageChops.difference(img3, img4)
diff = ImageChops.difference(img2, img1)

print(diff.getbbox())
if diff.getbbox():
    diff.show() # does not work for me. should show image if they are different

print(diff1.getbbox())

if diff1.getbbox():
    diff1.show() # this works not sure why the PNG files do not
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 上运行这个。我不确定我做错了什么。任何帮助都会非常感谢!

@Mark 帮助后的工作代码https : //github.com/timothy/image_diff/blob/master/test.py

Mar*_*ell 11

不是 100% 确定这里发生了什么,但是如果你把你的两个图像分成它们的通道并将它们并排放置,使用ImageMagick

magick 1.png -separate +append 1ch.png
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明

你可以看到红色、绿色和蓝色通道都包含形状,但有一个多余的 alpha 通道(最右边的区域)没有任何作用 - 除了混淆 PIL!

如果您更改代码以像这样删除 alpha 通道,它就会起作用:

img1 = Image.open('1.png').convert('RGB') 
img2 = Image.open('2.png').convert('RGB')
diff = ImageChops.difference(img2, img1)

diff.getbbox()
(28, 28, 156, 156)
Run Code Online (Sandbox Code Playgroud)

差异图像:

在此处输入图片说明

我还注意到 ImageChops.difference文档“其中一个图像必须是“1”模式”并且不知道这是否是一个问题。