Python PIL ValueError:图像不匹配

Mar*_*nne 15 python python-imaging-library

我正在玩PIL并遇到了这个问题,我无法看到文档在哪里我出错了.这是我的简单代码

from PIL import Image
from PIL.ImageChops import difference

imageA = Image.open("image1.png")
imageB = Image.open("image2.png")

if imageA.size == imageB.size:
    diff = difference(imageA, imageB)
    diff.save("test.png")
Run Code Online (Sandbox Code Playgroud)

这给了我错误

Traceback (most recent call last):
  File "C:\[XXX]\box-test.py", line 8, in <module>
    diff = difference(imageA, imageB)
  File "C:\Python32\lib\site-packages\PIL\ImageChops.py", line 123, in difference
    return image1._new(image1.im.chop_difference(image2.im))
ValueError: images do not match
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

mmg*_*mgp 25

该功能的文档实际上并没有多少说明.所以让我试着澄清一下.首先,图像的大小与功能是否有效无关,它在内部检查两个图像适合的大小.

现在,你什么时候可以通过使用函数来比较图像ImageChops.difference

首先,两个图像必须具有可以存储在无符号字节中的像素.这是一种非常常见的图像类型,但这排除了图像之间的比较,即使它们是相同的模式.所以,你不能比较的图像xy当一个或/他们两个/有一个模式:F,I,I;16,I;16L,I;16B,BGR;15,BGR;16,BGR;24,或BGR;32.只是说清楚:如果两个图像碰巧处于上述模式之一,如果两个图像处于相同模式并不重要,则该功能将拒绝工作.

所以,当图像在模式的比较可以做到1,P,L,LA,RGB,RGBA,RGBX,RGBa,CMYK,或YCbCr只要它们具有相同的band数.这意味着图像不必具有相同的模式进行比较.例如,difference(x.convert('CMYK'), x.convert('RGBA'))difference(x.convert('1'), x.convert('P'))工作得很好.当然这意味着difference(x.convert('LA'), x.convert('L'))失败.最后,生成的图像将始终具有与传递给函数的第一个图像相同的模式.

这至少对PIL 1.1.7有效.