使用PIL比较2张图像/图片,有些不起作用

时间:2014-11-25 06:55:16

标签: python image python-imaging-library

我正在使用PIL比较2张图片/图片。下面的代码适用于某些图片但不是全部。

from PIL import Image
from PIL import ImageChops
from PIL import ImageDraw

im1 = Image.open(r'c:\a.jpg')
im2 = Image.open(r'c:\aa.jpg')

diff = ImageChops.difference(im2, im1).getbbox()

print diff

draw = ImageDraw.Draw(im2)
draw.rectangle(diff)
im2 = im2.convert('RGB')
im2.save(r'c:\aaa.jpg')

例如,它不适用于这两张照片。

A.JPG enter image description here

aa.jpg enter image description here

输出为(16,80,80,144),但它不会在图片上绘制任何内容。

问题:

  1. 为什么会这样?
  2. 文件类型是否重要?即JPG与JPG比较; PNG与PNG比较; BMP与BMP比较 - 哪种格式最适合比较?
  3. 有时差异在于图片上的远距离,因此它将绘制一个大矩形以包含整个区域。有没有办法只绘制小矩形来标记差异?
  4. 感谢。

1 个答案:

答案 0 :(得分:2)

from PIL import Image
from PIL import ImageChops
from PIL import ImageDraw

im1 = Image.open('a.jpg')
im2 = Image.open('aa.jpg')

diff = ImageChops.difference(im2, im1).getbbox()

print diff

draw = ImageDraw.Draw(im2)
draw.rectangle(diff, outline = (0,255,0))
print  help(draw.rectangle)
im2 = im2.convert('RGB')
im2.save('aaa.jpg')
  

模块PIL.ImageDraw中方法矩形的帮助:

     

矩形(self,xy,fill = None,outline = None)方法   PIL.ImageDraw.ImageDraw实例

所以大纲参数默认为,这就是为什么它在这里创建透明矩形。

enter image description here