2013-05-23 13 views
7

Potrzebuję funkcji, która porównuje dwa obrazy PIL tego samego rozmiaru. Nazwijmy je A i B. Wynik ma być nowym obrazem tego samego rozmiaru. Jeśli piksele są takie same zarówno w A, jak i B, to powinno być ustawione na stały kolor (np. Czarny), w przeciwnym razie powinien być ustawiony na ten sam kolor co B.Porównywanie dwóch obrazów w pikselach z PIL (Python Imaging Library)

Czy istnieje biblioteka do implementacji tej funkcji bez kosztownej pętli nad wszystkimi pikselami?

Odpowiedz

13

Nie wiem o innych bibliotek, ale można to zrobić z PIL, z czymś takim ...

from PIL import Image, ImageChops 

point_table = ([0] + ([255] * 255)) 

def black_or_b(a, b): 
    diff = ImageChops.difference(a, b) 
    diff = diff.convert('L') 
    diff = diff.point(point_table) 
    new = diff.convert('RGB') 
    new.paste(b, mask=diff) 
    return new 

a = Image.open('a.png') 
b = Image.open('b.png') 
c = black_or_b(a, b) 
c.save('c.png') 
+0

Dzięki dużo! Prawie zamierzałem napisać tę część samodzielnie w C. – Maarten

+0

co to robi? –

Powiązane problemy