2017-02-04 2 views
1

私は画像処理の背景がありません。私はこれらの2つの画像の違いを得ることに興味があります。 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のtext()メソッドを使用してテキストを追加できます。例:http://stackoverflow.com/a/16377244/571215 –

関連する問題