2014-11-02 68 views
0

我有两个图像。我从第二个减去第一个并再次将差异添加到第一个并保存图像。但新图像与原始图像不同。这是为什么? 下面是代码:Imagechops减法和加法

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") 

回答

0

从我可以看到从IM1,IM2的像素值的数组的前瞻性和diff的这时候看来,如果DIFF值永远不会低于0,即使在im1的像素值大于im2的像素值。因此,例如,如果im1的一个点处的像素值是(255,255,255),并且对于im2,则它是(235,235,235),即使255-235 = -20,差异值也将是(0,0,0)。然后,当您尝试将im1的diff值添加到0时,它仍然会导致像素值为(255,255,255)而不是(235,235,235)。

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

-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") 
+0

im2 - im1 = diff; => im2 = im1 + diff;所以,我应该在im1添加diff后返回im2。我错了吗? – user3286661 2014-11-02 11:15:49

+0

想想这样吧。你从image2减去image1,你会得到一个区别。您应该将其添加回原始图像。 – GKBRK 2014-11-02 11:24:59

+0

是的确切..我将差异添加回第一张图片。 9 - 5 = 4;所以这里的差别是4. Im1是5,Im2是9.为了得到9,我必须加上4的差,到5是Im1。 – user3286661 2014-11-02 11:36:15