2014-11-02 34 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