Wie kann man ein numpy Array mit Pyglet anzeigen?

Ich habe eine Etikettenmatrix mit Dimension (100 * 100), die als ein numpy Array gespeichert ist, und ich möchte die Matrix mit Pyglet anzeigen.

Meine ursprüngliche Idee ist, diese Matrix zu verwenden, um ein neues Pyglet-Bild mit der Funktion pyglet.image.ImageData () zu bilden. Es verlangt einen Puffer der Bilddaten als Eingabe, aber ich habe keine Ahnung, wie man einen rechts formatierten Puffer aus dem numpy Array bekommt.

Jeder hat eine Ahnung?

Ps Meine aktuelle Lösung:

3d_label = numpy.empty([100,100,3]) 3d_label[:,:,0] = label * 255 # value range of label is [0,1] 3d_label[:,:,1] = label * 255 3d_label[:,:,2] = label * 255 image_data = ctypes.string_at(id(3d_label.tostring())+20, 100*100*3) image = pyglet.image.ImageData(100, 100, 'RGB', image_data, -100*3) 

Eine bessere Möglichkeit, eine [100 * 100 * 3] Matrix aus 3 [100 * 100] Matrix mit numpy zu konstruieren?

2 Solutions collect form web for “Wie kann man ein numpy Array mit Pyglet anzeigen?”

Ich denke, was du suchst, ist np.dstack (oder allgemeiner np.concatenate ):

 label255=label*255 label3=numpy.dstack((label255,label255,label255)) 

Dies zeigt dstack produziert das gleiche Array ( label3 ) wie Ihre Konstruktion für label_3d :

 import numpy as np label=np.random.random((100,100)) label255=label*255 label3=np.dstack((label255,label255,label255)) label_3d = np.empty([100,100,3]) label_3d[:,:,0] = label * 255 # value range of label is [0,1] label_3d[:,:,1] = label * 255 label_3d[:,:,2] = label * 255 print(np.all(label3==label_3d)) # True 

PS Ich bin mir nicht sicher, aber hast du versucht, mit label3.data anstelle von ctypes.string_at(id(label3.tostring())+20, 100*100*3) ?

Sie können die Speicherdarstellung Ihres Arrays mit 3d_label.tostring() .

Mit der Methode tostring() können Sie die Speicherbestellung der Elemente ändern:

 Parameters ---------- order : {'C', 'F', None}, optional Order of the data for multidimensional arrays: C, Fortran, or the same as for the original array. 

PS: Die 3d_label.data von ~ unutbu benötigt weniger Speicher, da kein String konstruiert wird. Es erlaubt jedoch nicht, die Reihenfolge zu ändern, in der die Elemente ausgegeben werden.

  • Wie programmiere ich eine doppelte Taste, um eine Nicht-Modifizierer-Taste zu verhalten, wie eine Modifikations-Taste in meinem Programm?
  • Python pyglet und opengl
  • Pyglet / avbin vermisst Anfang und Ende des Videos
  • Pyglet läuft nicht richtig auf AMD HD4250
  • Kann nicht ausziehen () sprites in pyglet
  • Wie bekomme ich Pyglet für Python 3?
  • Mit pyglet in python, warum ist meine Bildrate beschleunigen, wenn ich Maus ziehen?
  • Grundlegende openGL, Scheitelpuffer und pyglet
  • Daten von OpenGL erhalten glReadPixels (mit Pyglet)
  • Pyglet in Mac installieren
  • Unterschiede zwischen den Python-Spielbibliotheken Pygame und Pyglet?
  • Python ist die beste Programmiersprache der Welt.