[PYTHON] Lesen Sie das Bild des Puzzlespiels und geben Sie die Reihenfolge der einzelnen Blöcke aus

Zweck

Zum Beispiel möchte ich das Bild unten lesen und die Anordnung jedes Blocks bestimmen. Pazudora01.png

Problem

Ich habe versucht, den Wert durch Vorlagenanpassung mit OpenCV zu ermitteln, aber es dauert einige Zeit, bis jedes Bild übereinstimmt, und alle Bilder mit hoher Korrelation innerhalb des Schwellenwerts werden ausgegeben. Wählen Sie sie daher aus. Die Kosten waren hoch, weil ich ein Programm schreiben musste.

Politik

Unter Verwendung der RGB-Daten in der PIL-Bibliothek werden die RGB-Daten des für jeden Block ausgeschnittenen Bildes korreliert und als die Farbe erkannt, die dem Referenzwert am nächsten liegt.

Implementierung

Verwenden Sie das PIL-Image-Objekt.

import numpy
from PIL import Image

def get_rgb(pic, box=""):
    if box == "":
        box = (0, 0, pic.width, pic.height)
    rgbimg = pic.crop(box).convert("RGB")
    rgb = np.array(rgbimg.getdata())
    return [__round(rgb[:,0]),
            __round(rgb[:,1]),
            __round(rgb[:,2])]

def color(array):
    col = {}
    col["red"] = [100, 20, 20] #geeignet
    #Betten Sie während dieser Zeit den Standardwert für Farbe ein
    col["heart"] = [100, 70, 70] #geeignet
    
    max = 0
    result = ""
    for k, c in col.items:
       tmp = numpy.corrcoef(numpy.array(array), numpy.array(c))[0][1]
       if max < tmp:
           result = k
           max = tmp
    return result

def __round(array):
    return int(round(np.average(array)))

if __name__ == "__main__":
    '''
        xa :Startpunkt, xs :Blockbreite, xb :Endpunkt
     ya :Startpunkt, ys :Blockhöhe, yb :Endpunkt
    '''
    pic = Image.open("/path/to/Image.png ", 'r')
    for i in xrange(6):
        for j in xrange(5):
           box = (xa + xs*i,
                  ya + ys*j,
                  xb + xs*i,
                  yb + ys*j)
           rgb = get_rgb(pic, box)
           print color(rgb)

In diesem Fall gibt es kein besonderes Problem in Bezug auf die Geschwindigkeit, und die Erkennungsrate ist auch angemessen. Gelegentlich fällt sie wie eine Nullteilung ab.

Fazit

Ist Pazudora interessant? Ich habe es nie getan.

Recommended Posts

Lesen Sie das Bild des Puzzlespiels und geben Sie die Reihenfolge der einzelnen Blöcke aus
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
Lesen Sie die Ausgabe von subprocess.Popen in Echtzeit
Ich habe die Varianten von UKR gelesen und implementiert
Koordination jedes Prozesses im MPI und Pufferung der Standardausgabe
Filtern Sie die Ausgabe von tracemalloc
[EC2] So installieren Sie Chrome und den Inhalt jedes Befehls
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
Die Geschichte von Python und die Geschichte von NaN
[Python] Der Stolperstein des Imports
Führen Sie Pylint aus und lesen Sie die Ergebnisse
Lassen Sie Python die Befehlsausgabe lesen
Beurteilen Sie die Erweiterung und laden Sie das Bild herunter
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Über die Hauptaufgaben der Bildverarbeitung (Computer Vision) und die verwendete Architektur