PIL Bild in einem anderen finden

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
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Hallo,
versuche gerade etwas, bei dem ich einen Screenshot mache und dabei mein Prog suchen lassen will, ob auf dem Bild ein anders ist. Klinkt kompliziert, ich versuch es besser zu erklären was ich vorhabe:

- Bild mit z.B. einem Icon

- prog macht einen screenshot und soll nun darauf nach dem Icon suchen, und mir dann die Koordinate auf dem Bild geben.

Habe schon ein bisschen gesucht und nichts dazu unter google gefunden und weiß nicht wirklich, wie ich dies umsetzten kann. Hat von euch jemand soetwas gemacht oder hat eine gute Idee wie man das umsetzten könnte? Ich würde mich über Anregungen sehr freuen :)

Gruß waki
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Das hängt natürlich alles davon ab, wie komplex die Suche ist:

- ist das gesuchte Bild exakt in dem Suchbild vorhanden
- gibt es Verdeckungen
- wie genau soll die Suche sein
- wie schnell soll es gehen
- müssen Rotationen betrachtet werden
- ist das Bild immer gleich skaliert

In Abhängigkeit von den genannten Eigenschaften, kann man sich dann mehrere Ansätze aussuchen. Ansonsten gilt natürlich: OpenCV hat da bestimmt schon eine fertige Lösung.

Sebastian
Das Leben ist wie ein Tennisball.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Bild ist exakt vorhanden, keine Verdeckungen, die suche sollte mir eben einen Koordinaten zurück geben, am besten einen in der Mitte, sollte relativ schnell gehen, Rotation ist nicht vorhanden und das Ausgangsbild ist immer gleich skaliert, aber das Suchbild kann unterschiedliche Größen haben.

Alle Fragen hoffentlich beantwortet :D

Werde mir mal OpenCV anschauen, hätten ihr einen Lösungsweg mit PIL? Wäre mir lieber....
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann versuche es doch einfach mal mit Brute-Force. Probiere einfach jedes Pixel aus, ob dort das gesuchte Bild beginnt. Der größte Teil der Test wird wahrscheinlich bereits nach einem Pixel abbrechen und du kannst mit dem nächsten Position fortfahren. Ist in wenigen Zeilen zu implementieren und reich vielleicht schon aus.

Sebastian
Das Leben ist wie ein Tennisball.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

hmm, ich probiers mal, könnt mir aber vorstellen, dass das ganze relativ langsam wird...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Kreuzkorrelation im reziproken Raum mit anschließender Suche nach dem Maximum? Das geht fix.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Habe ein Problem: Wenn ich mit Photoshop aus dem Screenshot ein kleines Bild auschneide und mit dne exakt gleichen einstellungen speichere, veränder sich beim neuen nach dem speichern immer einige pixel :o Ich schau mal ob ichs mit python hinbekomme...
Zuletzt geändert von waki am Freitag 30. September 2011, 16:29, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sobald Bilder durch verlustbehaftete Kompression "verfälscht" werden, kann so ein nicht tolleranter Algo nicht mehr funzen! Für das menschliche Auge mögen Deine Beispielbilder ja gleich aussehen, in Wirklichkeit aber kann es doch durchaus sein, dass sich die Farbwerte unterscheiden!

Deinen Ansatz musst Du also mit Formaten testen, die keine solche Kompression beinhalten! PNG kann das z.B., oder natürlich auch andere. Bei JPEG bin ich mir nicht sicher, ob sich die Kompression zu 100% ausschalten lässt.

Generell hat Dein Ansatz noch das Problem, dass er für Deine Voraussetzungen nicht klappen kann, denn die unterschiedlichen Größen zwischen Muster und Suchbild kompensierst Du so natürlich nicht.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Ok, habe es jetzt hinbekommen, dass das ausgeschnitte bild nicht verädert wird und mein script kann es nun auch finden....
Antworten