Python PIL ValueError:图像不匹配

时间:2012-09-06 00:56:03

标签: 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")

给了我错误

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

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:24)

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

现在,您何时可以使用函数ImageChops.difference实际比较图像?

首先,两个图像都必须具有可以存储在无符号字节中的像素。这是一种非常常见的图像类型,但这排除了图像之间的比较,即使它们是相同的模式。因此,如果图片xy的模式为:FII;16,{ {1}},I;16LI;16BBGR;15BGR;16BGR;24。只是为了说清楚:如果两个图像碰巧处于上述模式之一,如果两个图像处于相同模式并不重要,则该功能将拒绝工作。

因此,当图像处于BGR;321PLLA,{{1}模式时,可以进行比较}},RGBRGBARGBXRGBa只要它们具有相同数量的波段。这意味着图像不必具有相同的模式。例如,CMYKYCbCr工作正常。当然这意味着difference(x.convert('CMYK'), x.convert('RGBA'))失败了。最后,生成的图像将始终具有与传递给函数的第一个图像相同的模式。

这至少对PIL 1.1.7有效。