Python PIL ValueError:图像不匹配 [英] Python PIL ValueError: images do not match

查看:629
本文介绍了Python PIL ValueError:图像不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm playing around with PIL and came across this problem and I can't see where in the docs I'm going wrong. Here is my simple code

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

任何帮助将不胜感激

推荐答案

该函数的文档实际上并不能说明很多.因此,让我尝试澄清一下.首先,图像的大小与该功能是否起作用无关,它会在内部检查两个图像是否合适.

The documentation for this function doesn't tell much in fact. So let me try to clarify it a little. First, the sizes of the images are irrelevant to whether the function works or not, it internally checks for a size that both images fit.

现在,何时可以使用功能ImageChops.difference实际比较图像?

Now, when can you actually compare the images by using the function ImageChops.difference ?

首先,两个图像都必须具有可以存储在无符号字节中的像素.这是一种非常常见的图像类型,但是即使图像处于相同模式,也无法进行图像之间的比较.因此,当图像xy中的一个或两个都具有以下模式时,您将无法比较图像:FII;16I;16LI;16BBGR;15BGR;16BGR;24BGR;32.为了清楚起见:如果两个图像碰巧处于上述模式之一,则两个图像是否处于同一模式并不重要,该功能将无法正常工作.

First, both images have to have pixels that can be stored in an unsigned byte. This is a very common type of image, but this excludes comparison between images even if they are the same mode. So, you cannot compare an image x and y when one or /both/ of them have a mode of: F, I, I;16, I;16L, I;16B, BGR;15, BGR;16, BGR;24, or BGR;32. Just to make it clear: it doesn't matter if both images are in the same mode if they happen to be in one of the modes above, the function will refuse to work.

因此,当图像处于1PLLARGBRGBARGBXRGBaCMYKYCbCr,只要它们具有相同数量的频段.这意味着图像不必具有相同的模式进行比较.例如,difference(x.convert('CMYK'), x.convert('RGBA'))difference(x.convert('1'), x.convert('P'))可以正常工作.当然,这意味着difference(x.convert('LA'), x.convert('L'))失败.最后,生成的图像将始终具有与传递给该函数的第一张图像相同的模式.

So, the comparison can be done when the images are in the modes 1, P, L, LA, RGB, RGBA, RGBX, RGBa, CMYK, or YCbCr as long as they have the same number of bands. This means the images don't have to have the same mode to be compared. For instance, difference(x.convert('CMYK'), x.convert('RGBA')) or difference(x.convert('1'), x.convert('P')) work just fine. Of course this means difference(x.convert('LA'), x.convert('L')), fails. Finally, the resulting image will always have the mode equal to the first image passed to the function.

这至少对PIL 1.1.7有效.

This is valid at least for the PIL 1.1.7.

这篇关于Python PIL ValueError:图像不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆