2016-04-09 13 views
1

Ich baue eine Anwendung mit Tkinter, wo man z. Linien in einem Canvas. Das funktioniert gut. Ich kann jedoch keine Methode zum Abrufen der aktuellen Canvas-Daten finden. Vorzugsweise möchte ich ein numpy Array aus den aktuellen Canvas-Daten erhalten, da meine Nachbearbeitungsschritte meistens numpy verwenden.Wie bekomme ich Numpy Array von Canvas-Daten?

Gibt es eine Möglichkeit, numpy Arrays aus den Canvas-Daten zu erstellen? In irgendeinem Farbformat wie RGB, vorzugsweise?


Ich weiß, dass ich die Informationen z. von Linien (wie Koordinaten) aus dem Canvas, aber ich brauche diese Informationen nicht. Ich brauche eine gerasterte Bilddaten der gesamten Canvas-Szene. Wie ein numpliges Array oder ein (gerastertes) Bild (jpg, png, tiff, bitmap, ...).

+0

Ich habe nie numpy verwendet, aber Methoden zum Abrufen von Koordinaten aus Canvas-Elementen sind gut dokumentiert. –

+0

Ja, aber ich brauche Bilddaten, wie ein Datenarray oder eine Bilddatei (wie JPG, PNG, TIFF, Bitmap, ...) aus dem Canvas. Die Koordinaten der Objekte selbst sind für mich irrelevant, weil ich mit nur den Koordinaten die Szenerie neu zeichnen müsste, zum Beispiel mit PIL. Ich brauche gerasterte Bilddaten. – daniel451

+0

Es gibt keine Möglichkeit, gerasterte Bilddaten von der Zeichenfläche zu entfernen –

Antwort

1

Wie @Bryan Oakley sagte: Es gibt keine Weg, um eine gerasterte Version eines Tkinter Canvas Zeichnung zu bekommen.

Allerdings dachte ich, diese Abhilfe aus:

import skimage.io as ski_io 

(...) 
# draw your canvas 
(...) 

# save canvas to .eps (postscript) file 
canvas.postscript(file="tmp_canvas.eps", 
        colormode="color", 
        width=CANVAS_WIDTH, 
        height=CANVAS_HEIGHT, 
        pagewidth=CANVAS_WIDTH-1, 
        pageheight=CANVAS_HEIGHT-1) 

# read the postscript data 
data = ski_io.imread("tmp_canvas.eps") 

# write a rasterized png file 
ski_io.imsave("canvas_image.png", data) 

Ich weiß nicht wirklich wie Abhilfen, aber skimage scheint die schnellste Lösung zu sein Postscript-Dateien zum Lesen und Schreiben von pngs.

Scikit-image als Toolkit für SciPy entwickelt, daher wird es mit scipy.ndimage intern arbeiten, das ist genau das, was ich will und kann verwendet werden np.ndarray sehr leicht zu erstellen.

Zusätzlich ist scikit-learn eine leistungsstarke und schnelle Bildverarbeitungssoftware, die verschiedene Bildformate manipulieren, lesen und speichern kann.

Jetzt haben Sie die volle Auswahl: erhält ein NumPynp.ndarray aus Canvas Daten für weitere Berechnungen, manipuliert die scipy.ndimage mit SciPy/scikit-Bild oder die Daten speichern, z.B. als gerastertes PNG auf Platte.