2016-06-10 9 views
0

Ich habe eine Reihe von kleinen Sprites, in der Regel 25x20 Art von Größen, nichts über 256x256. Einige dieser Sprites werden dupliziert, indem sie geringfügig verkleinert werden, oder manchmal werden ein paar Pixel an Kanten entfernt oder hinzugefügt, oder eine Farbe hat sich geändert.Doppelte Bilder mit Skalierung oder anderen kleinen Änderungen finden?

Wie kann ich diese Duplikate finden? Meine Anwendung ist in C++ geschrieben und meine Bilder sind SDL_Surfaces * es.

Ich habe ein paar Beispiel-Sprite-Blätter beigefügt, die die Art von Sprites zeigen, die ich versuche zu vergleichen und zu entfernen.

higher res

lower res and other changes

Hier ist ein Bild, das zeigt deutlicher, was ich, da ich einige Leute verwirrt habe denken zu vergleichen bin versucht, und ich denke, die „ganze Sprite Blatt“ vergleichen wollen, wenn ich wirklich nur wollen invidual Sprites miteinander zu vergleichen:

enter image description here

+0

Es scheint schmerzhaft. Theoretisch sollte Template Matching von OpenCV funktionieren. http://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html – lllllllllll

+0

Huh warum die down vote? Es gibt kaum Online-Informationen darüber, wie man das macht – paulm

+0

Ein Mangel an Online-Informationen macht Ihren Beitrag nicht gut oder sogar eine gute Passform für SO. In seiner aktuellen Form ist die Frage "Ich möchte X machen, wie ich es mache" zu breit. –

Antwort

2

Bitte lesen Sie meine Antwort auf Open CV tic tac toe X/O detection. Auch die akzeptierte Antwort könnte hilfreich sein.

Meine Antwort für Ihren Fall: Es könnte die Spiel Shapes Funktion von OpenCV (Check Abschnitt 3 in den Documentation)

So für jedes Bild durchgeführt wird unter Verwendung bekommt größte Kontur (Ihr Objekt) und ruft, dass Funktion mit ALL die anderen Bilder. Die Funktion gibt für jedes Bilderpaar, das den Ähnlichkeiten zwischen beiden Konturen entspricht, einen Wert von 0 bis 1 zurück: Je kleiner der Wert, desto ähnlicher sind die Konturen. Sie können einen bestimmten Schwellenwert festlegen, um andere Bilder zu entfernen (z. B. alle Bilder, die 0,5 ähnlich sind). Trial and Error ist möglicherweise der einzige Weg, den besten Schwellenwert zu finden. Und viel Glück!