2017-02-04 162 views
1

我沒有背景圖像處理。我有興趣瞭解這兩張圖片的區別。 enter image description here如何自定義圖像差異產生的輸出?

enter image description here

編寫下面的代碼後:

from PIL import Image 
from PIL import ImageChops 

im1 = Image.open("1.png") 
im2 = Image.open("2.png") 

diff = ImageChops.difference(im2, im1) 
diff.save("diff.png") 

我得到這樣的輸出: -

enter image description here

我要尋找一些客戶化的位置:

1)我想用不同的顏色標記輸出的差異。 1.png和2.png應該有不同的顏色。

2)背景應該是白色的。

3)我想我的輸出有軸和軸標籤。以某種方式可能嗎?

+0

好的,我在編輯這個問題。 –

回答

1

您可能無法使用高級別差異方法執行此操作,但如果您自己逐個像素地比較圖像,則很容易。快速嘗試:

enter image description here

代碼:

from PIL import Image 
from PIL import ImageDraw 
from PIL import ImageFont 

im1 = Image.open("im1.jpeg").convert('1') # binary image for pixel evaluation 
rgb1 = Image.open("im1.jpeg").convert('RGB') # RGB image for border copy 
p1 = im1.load() 
prgb1 = rgb1.load() 

im2 = Image.open("im2.jpeg").convert('1') # binary image for pixel evaluation 
p2 = im2.load() 

width = im1.size[0] 
height = im1.size[1] 

imd = Image.new("RGB", im1.size) 
draw = ImageDraw.Draw(imd) 
dest = imd.load() 
fnt = ImageFont.truetype('/System/Library/Fonts/OpenSans-Regular.ttf', 20) 

for i in range(0, width): 
     for j in range(0, height): 

     # border region: just copy pixels from RGB image 1 
      if j < 30 or j > 538 or i < 170 or i > 650: 
      dest[i,j] = prgb1[i,j] 
     # pixel is only set in im1, make red 
      elif p1[i,j] == 255 and p2[i,j] == 0: 
      dest[i,j] = (255,0,0) 
     # pixel is only set in im2, make blue 
      elif p1[i,j] == 0 and p2[i,j] == 255: 
      dest[i,j] = (0,0,255) 
     # unchanged pixel/background: make white 
      else: 
      dest[i,j] = (255,255,255) 


draw.text((700, 50),"blue", "blue", font=fnt) 
draw.text((700, 20),"red", "red", font=fnt) 
imd.show() 
imd.save("diff.png") 

這假定圖像是相同的尺寸和具有同一軸線。

+0

非常感謝。對不起,延遲的回覆。這是完美的。只需要傳說和底部邊界。我會自己嘗試。 –

+0

我無法找出不同顏色的圖例選項。你能幫我在這裏嗎?我能夠適當調整極限。 –

+0

您可以使用ImageDraw文本()方法添加文本,示例如下:http://stackoverflow.com/a/16377244/571215 –