Konvertieren Sie numpy Array in PySide QPixmap

Ich möchte ein Bild in ein NumPy-Array in eine PySide QPixmap konvertieren, also kann ich es anzeigen (EDIT: in my PySide UI). Ich habe dieses Tool schon gefunden: qimage2ndarray , aber es funktioniert nur für PyQt4. Ich habe versucht, es zu ändern, um es mit PySide zu arbeiten, aber ich müsste den C-Teil des Tools ändern und ich habe keine Erfahrung mit C. Wie kann ich das machen oder gibt es irgendwelche Alternativen?

3 Solutions collect form web for “Konvertieren Sie numpy Array in PySide QPixmap”

Eine Alternative ist, nur PIL-Bibliothek zu benutzen.

>>> import numpy as np >>> import Image >>> im = Image.fromarray(np.random.randint(0,256,size=(100,100,3)).astype(np.uint8)) >>> im.show() 

Sie können den QPixmap-Konstruktor unter http://www.pyside.org/docs/pyside/PySide/QtGui/QImage.html anschauen.

Es sieht so aus, als müsst du in der Lage sein, ein numpy Array direkt im Konstruktor zu verwenden:

Klasse PySide.QtGui.QImage (Daten, Breite, Höhe, Format)

Wo das Format-Argument ist einer von diesen: http://www.pyside.org/docs/pyside/PySide/QtGui/QImage.html#PySide.QtGui.PySide.QtGui.QImage.Format .

Also, zum Beispiel könntest du so etwas machen:

 >>> a = np.random.randint(0,256,size=(100,100,3)).astype(np.uint32) >>> b = (255 << 24 | a[:,:,0] << 16 | a[:,:,1] << 8 | a[:,:,2]).flatten() # pack RGB values >>> im = PySide.QtGui.QImage(b, 100, 100, PySide.QtGui.QImage.Format_RGB32) 

Ich habe keine PySide installiert, also habe ich das nicht getestet. Chancen sind es wird nicht funktionieren, wie es ist, aber es könnte Sie in die richtige Richtung führen.

Wenn Sie die Daten selbst erstellen, mit numpy zum Beispiel, denke ich, dass die schnellste Methode ist, direkt auf eine QImage zuzugreifen. Sie können ein ndarray aus dem Pufferobjekt QImage.bits () erstellen, einige Arbeiten mit den numpy Methoden durchführen und eine QPixmap von QImage erstellen, wenn Sie fertig sind. Sie können auch vorhandene QImages auf diese Weise lesen oder ändern.

 import numpy as np from PySide.QtGui import QImage img = QImage(30, 30, QImage.Format_RGB32) imgarr = np.ndarray(shape=(30,30), dtype=np.uint32, buffer=img.bits()) # qt write, numpy read img.setPixel(0, 0, 5) print "%x" % imgarr[0,0] # numpy write, qt read imgarr[0,1] = 0xff000006 print "%x" % img.pixel(1,0) 

Achten Sie darauf, dass das Array das Bildobjekt nicht überlebt. Wenn du willst, kannst du einen anspruchsvolleren dtype verwenden, wie ein Record-Array für den individuellen Zugriff auf die alpha-, roten, grünen und blauen Bits (hüten Sie sich von endianess though).

Falls es keine effiziente Möglichkeit gibt, die Pixelwerte mit numpy zu berechnen, kannst du auch scipy.weave verwenden, um einen C / C ++ – Code zu zeichnen, der auf dem Array img.bits () steht.

Wenn Sie bereits ein Bild im ARGB-Format haben, ist das Erstellen der QImage aus Daten, wie es vorher vorgeschlagen wurde, wahrscheinlich einfacher.

Zusätzlich zu @ user545424 Antwort über die Verwendung von PIL, wenn Sie nicht wollen, um von PIL abhängen, könnten Sie manuell konstruieren Sie Ihr Bild direkt aus Ihrem np-Array:

 width = 100 height = 100 data = np.random.randint(0,256,size=(width,height,3)).astype(np.uint8) img = QtGui.QImage(width, height, QtGui.QImage.Format_RGB32) for x in xrange(width): for y in xrange(height): img.setPixel(x, y, QtGui.QColor(*data[x][y]).rgb()) pix = QtGui.QPixmap.fromImage(img) 

Ich bin sicher, mit PIL, gibt es eine Möglichkeit, die tatsächlichen Bilddaten in ein QImage zu lesen, aber ich werde @ user545424 Adresse, dass Teil seit seiner von seiner Antwort zu lesen. PIL kommt mit dem ImageQt-Modul, das für die direkte Konvertierung eines Bildes -> QPixmap bequem ist, aber leider ist das eine PyQt4 QPixmap, die dir nicht hilft.

  • Ich brauche Hilfe bei einem Flash-Webvideo-Screenshot auf Pyside oder PyQt4
  • PySide / PyQt - Das Starten eines CPU-Intensiv-Threads hängt die gesamte Applikation
  • PySide-Importfehler Mac OS X El Capitan, Bibliothek nicht geladen: @ rpath / libpyside.cpython-34m.1.2.dylib
  • Einheit und Funktionsprüfung einer PySide-basierten Anwendung?
  • Lesen von pyqt Stylesheet aus externer qss Datei
  • Qt QGraphicsDropShadowEffect wird nicht angezeigt
  • Sammle alle Artikel in QTreeview rekursiv
  • Wie bekomme ich jede Prozess-ID beim Multiprocessing
  • Wie kann ich ipythons machen RichIPythonWidget verwenden pyside in einer pyinstaller Umgebung?
  • MousePressEvent, Positionsoffset in QGraphicsView
  • Wie bekomme ich eine konsequente Hervorhebung von QListWidget-Elementen über Widget-Staaten?
  • Python ist die beste Programmiersprache der Welt.