Seite 1 von 1

PIL Bild in einem anderen finden

Verfasst: Dienstag 27. September 2011, 18:31
von waki
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

Re: PIL Bild in einem anderen finden

Verfasst: Dienstag 27. September 2011, 18:55
von EyDu
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

Re: PIL Bild in einem anderen finden

Verfasst: Dienstag 27. September 2011, 19:13
von deets
http://opencv.itseez.com/doc/tutorials/ ... nn-matcher

Aber CV ist starker Tobak, wie ich immer wieder bemerken muss...

Re: PIL Bild in einem anderen finden

Verfasst: Freitag 30. September 2011, 12:43
von waki
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....

Re: PIL Bild in einem anderen finden

Verfasst: Freitag 30. September 2011, 13:02
von EyDu
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

Re: PIL Bild in einem anderen finden

Verfasst: Freitag 30. September 2011, 13:09
von waki
hmm, ich probiers mal, könnt mir aber vorstellen, dass das ganze relativ langsam wird...

Re: PIL Bild in einem anderen finden

Verfasst: Freitag 30. September 2011, 13:47
von CM
Kreuzkorrelation im reziproken Raum mit anschließender Suche nach dem Maximum? Das geht fix.

Re: PIL Bild in einem anderen finden

Verfasst: Freitag 30. September 2011, 15:53
von waki
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...

Re: PIL Bild in einem anderen finden

Verfasst: Freitag 30. September 2011, 16:21
von Hyperion
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.

Re: PIL Bild in einem anderen finden

Verfasst: Freitag 30. September 2011, 16:44
von waki
Ok, habe es jetzt hinbekommen, dass das ausgeschnitte bild nicht verädert wird und mein script kann es nun auch finden....