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
Bilder vergleichen
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]
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die entscheidene Frage ist doch, wie dieser Wert ermittelt werden soll? Was ist das Kriterium für "Gleichheit"?Andyh hat geschrieben: Ich möchte zwei Bilder vergleichen und zwar so das ein Prozentwert herauskommt.
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.Habe schon einige Sachen mit PIL ausprobiert, leider ohne Ergebnis.
Du glaubst doch nicht, dass Dir nach diesen 2 Sätzchen jemand ernsthaft helfen kann?
Hallo
Ja die Frage war jetzt nicht gerade meine beste
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.
gruß
Andyh
Ja die Frage war jetzt nicht gerade meine beste
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
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]
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
@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.
-
- User
- Beiträge: 79
- Registriert: Montag 12. Oktober 2009, 11:50
Er hat es wohl von http://rosettacode.org/wiki/Percentage_ ... een_images genommen. Ich verwende http://libpuzzle.pureftpd.org/project/libpuzzle fuer einen Vergleich.
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
Gruß
Andyh
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
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]
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys
if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]