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”模式”并且不知道这是否是一个问题。