Ich habe ein Bild in einem QImage und ich möchte es in PIL verarbeiten, bevor ich es anzeigen. Während die ImageQT-Klasse es mir erlaubt, ein PIL-Bild in ein QImage zu konvertieren, scheint nichts von einem QImage zu einem PIL-Bild zu gehen.Convert PyQt in PIL Bild
Antwort
ich wandeln es von QImage zu PIL mit diesem Code:
img = QImage("/tmp/example.png")
buffer = QBuffer()
buffer.open(QIODevice.ReadWrite)
img.save(buffer, "PNG")
strio = cStringIO.StringIO()
strio.write(buffer.data())
buffer.close()
strio.seek(0)
pil_im = Image.open(strio)
Ich habe versucht, viele Kombinationen, bevor man es arbeiten.
Sie können eine QImage in einen Python-String konvertieren:
>>> image = QImage(256, 256, QImage.Format_ARGB32)
>>> bytes = image.bits().asstring(image.numBytes())
>>> len(bytes)
262144
von diesem zu PIL Konvertierung sollte einfach sein.
Ich glaube nicht, dass direkte Bilddaten kompatibel sind zwischen QImage und PIL Bilder. Was ich nach einigem Herumspielen herausgefunden habe (es hat mich gebissen): Qt richtet alle seine Zeilen auf 32 Bit aus, was bedeutet, dass, wenn die Anzahl der Bytes pro Zeile für Bild nicht durch 4 teilbar ist, Mist in die Daten eingefügt wird. Vielleicht gibt es noch mehr Probleme ... –
Ein anderer Weg wäre:
- Laden der Bilddaten in eine numpy array (example code PIL verwenden)
- das Bild unter Verwendung von Manipulieren numpy, scipy oder scikits.image
- laden die Daten in ein QImage (Beispiel: das scikits.image Archiv durchsuchen (verlinkt in 1) und schauen auf Linie 45 von qt_plugin.py - sorry, stackoverflow erlaubt mir nicht noch mehr Links zu posten)
Wie Virgil erwähnt, die Daten müssen 32-Bit (oder 4-Byte) ausgerichtet sein, was bedeutet, dass Sie daran denken müssen, die Schritte in Schritt 3 zu spezifizieren (wie im Schnipsel gezeigt).
Können Sie den anderen Link noch hinzufügen? (Damals, als ich dieses Problem hatte, habe ich gerade eine andere Antwort gepostet, um den zweiten Link zu halten ;-) – SamB
Sicher, hier ist es: https://github.com/stefanv/scikits.image/blob/master/scikits/image/ io/_plugins/qt_plugin.py # L45 –
from PyQt4 import QtGui, QtCore
img = QtGui.QImage("greyScaleImage.png")
bytes=img.bits().asstring(img.numBytes())
from PIL import Image
pilimg = Image.frombuffer("L",(img.width(),img.height()),bytes,'raw', "L", 0, 1)
pilimg.show()
Danke Eli Bendersky, Ihr Code war hilfreich.
Sie haben vergessen, vor jeder Codezeile vier Leerzeichen einzufügen (und nur einen Zeilenumbruch zwischen Zeilen). – SamB
#Code for converting grayscale QImage to PIL image
from PyQt4 import QtGui, QtCore
qimage1 = QtGui.QImage("t1.png")
bytes=qimage1.bits().asstring(qimage1.numBytes())
from PIL import Image
pilimg = Image.frombuffer("L",(qimage1.width(),qimage1.height()),bytes,'raw', "L", 0, 1)
pilimg.show()
- 1. PIL - Convert GIF Frames zu JPG
- 2. PIL: Bytearray in Bild konvertieren
- 3. Übersetzen Bild mit PIL
- 4. Hintergrund mit transparentem Bild in PIL verschmelzen
- 5. PIL-Bild in Byte-Array konvertieren?
- 6. HowTo Region Pyglet Bild in PIL Image?
- 7. Python PIL Bild in Label auto resize
- 8. Wie konvertiert man ein Pyglet-Bild in ein PIL-Bild?
- 9. Wie speichere ich ein Bild in Python 3 mit PIL?
- 10. PIL Bild zu sqlite3 Blob und umgekehrt?
- 11. Python 3.5: PIL Image.fromarray produziert unsinniges Bild
- 12. Python Schleife für Bild und pil Modul
- 13. Bild mit PIL herunterladen und Anfragen
- 14. Open PIL Bild von Byte-Datei
- 15. pil python multiple Bild unabhängig zeichnen
- 16. PIL: Thumbnail und mit einem quadratischen Bild
- 17. Convert base64 in Bild in C#
- 18. Wie erstelle ich ein OpenCV-Bild aus einem PIL-Bild?
- 19. Convert R Bild Base 64
- 20. Convert Gif Bild zu NSData
- 21. Convert HTML zu einem Bild
- 22. convert base64 zu Bild in Javascript/jquery
- 23. Convert Array Bild (EBImage) in R
- 24. Wie Bitmap-Bild in Python zu analysieren, mit PIL?
- 25. Python PIL ein Bilder Ergebnisse in alle schwarzen Bild kombinieren
- 26. Python PIL: wie PNG-Bild in String schreiben
- 27. PIL ImageTK lädt kein Bild in py2app Anwendungspaket
- 28. ein Bild in Python Ändern der Größe von PIL mit
- 29. Beschneiden Sie das Bild mit PIL in Python
- 30. Wie öffne ich PIL Bild in Tkinter auf Leinwand
Dies funktioniert auch in Python3, ändern Sie einfach "cStringIO.StringIO" in "io.BytesIO". – mzuther