Bilder vergleichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Ich möchte zwei Bilder vergleichen und zwar so das ein Prozentwert herauskommt.

Habe schon einige Sachen mit PIL ausprobiert, leider ohne Ergebnis.

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Andyh hat geschrieben: Ich möchte zwei Bilder vergleichen und zwar so das ein Prozentwert herauskommt.
Die entscheidene Frage ist doch, wie dieser Wert ermittelt werden soll? Was ist das Kriterium für "Gleichheit"?
Habe schon einige Sachen mit PIL ausprobiert, leider ohne Ergebnis.
Du bist doch kein Neuling mehr hier (> 300 Posts)... also solltest Du wissen, dass man ein wenig präziser beschreiben sollte, was man erreichen will und ggf. auch mal zeigen sollte, was man denn bereits probiert hat und woran es ggf. hapert.

Du glaubst doch nicht, dass Dir nach diesen 2 Sätzchen jemand ernsthaft helfen kann?
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Ja die Frage war jetzt nicht gerade meine beste :oops:

Nur wieder mal komisch ich habe den ganzen morgen gesucht und gebastelt und nichts gefunden, dann stell ich hier die Frage und finde dann innerhalb einer Stunde etwas.

Code: Alles auswählen

def img_equal(i1, i2, o_grenze = None, u_grenze = None):
    assert i1.mode == i2.mode, "Different kinds of images."
    assert i1.size == i2.size, "Different sizes."
 
    pairs = izip(i1.getdata(), i2.getdata())
    if len(i1.getbands()) == 1:
        dif = sum(abs(p1-p2) for p1,p2 in pairs)
    else:
        dif = sum(abs(c1-c2) for p1,p2 in pairs for c1,c2 in zip(p1,p2))
 
    ncomponents = i1.size[0] * i1.size[1] * 3
    diff =  100 - ((dif / 255.0 * 100) / ncomponents)
    if o_grenze and u_grenze:
        if diff >= u_grenze and diff <= o_grenze:
            return (True, diff)
        else:
            return (False, diff)
    else:
        return diff
gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
BlackJack

@Andyh: Das die Funktion je nach Argumenten mal ein Tupel und mal einen einzelnen Wert zurückgibt ist unschön. Ausserdem funktioniert das nicht wenn die Ober- oder die Untergrenze 0 ist. Dieser zusätzliche Test ob das Ergebnis in einem bestimmten Rahmen liegt gehört IMHO nicht in diese Funktion.
Gabelmensch
User
Beiträge: 79
Registriert: Montag 12. Oktober 2009, 11:50

Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

Hallo

Nö eigentlich nicht. Ich habe es genau so wie es da steht in einer Paste gefunden, weis aber gerade nicht mehr wo das wahr.

Es ist aber fast identisch also hat da jemand abgeschrieben :D

Gruß
Andyh
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
Antworten