Imagechops减法和加法

时间:2014-11-02 11:01:39

标签: python python-imaging-library

我有两张照片。我从第二个中减去第一个并再次将差异添加到第一个并保存图像。但新图像与原始图像不同。为什么会这样? 这是代码:

import Image
from PIL import ImageChops

im1 = Image.open("scimg1.png") 
im2 = Image.open("scimg2.png")

diff = ImageChops.subtract(im2, im1)
newim2 = ImageChops.add(im1, diff)
newim2.save("newim2.png")
diff.save("diffimg.png")

2 个答案:

答案 0 :(得分:0)

从im1,im2和diff看到像素值的数组时我看到的情况看来,即使im1的像素值大于im2的像素值,diff值也不会低于0。

因此,例如,如果im1的一个点的像素值是(255,255,255),而im2的像素值是(235,235,235),则即使255-235 = -20,diff值也将是(0,0,0)。然后,当您尝试将diff值0添加到im1时,它仍将导致pixelvalue为(255,255,255)而不是(235,235,235)。

此外,diff阵列似乎对应于im1阵列的大小,因此如果im1小于im2,则diff图像也会更小。但是,根据你使用的图像,我不确定它是否会相同,我建议你导入numpy并查看你自己的图片和差异的数组。

答案 1 :(得分:-2)

这是因为您从 im2 中减去图像,但将其添加回 im1 。如果你修复了代码应该正常工作。

这里是固定代码:

import Image
from PIL import ImageChops

im1 = Image.open("scimg1.png") 
im2 = Image.open("scimg2.png")

diff = ImageChops.subtract(im2, im1)
newim2 = ImageChops.add(im2, diff)
newim2.save("newim2.png")
diff.save("diffimg.png")