У меня есть изображение в QImage, и я хочу обработать его в PIL, прежде чем я его покажу. В то время как класс ImageQT позволяет мне преобразовать изображение PIL в QImage, от QImage ничего не видно, чтобы получить изображение PIL.Преобразование PyQt в PIL image
ответ
преобразовать его из QImage в PIL с этим кодом:
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)
Я перепробовал много комбинаций, прежде чем заставить его работать.
Вы можете преобразовать QImage в строку Python:
>>> image = QImage(256, 256, QImage.Format_ARGB32)
>>> bytes = image.bits().asstring(image.numBytes())
>>> len(bytes)
262144
Преобразование это PIL должно быть легко.
Я не думаю, что данные прямого изображения совместимы между изображениями QImage и PIL. То, что я узнал после некоторого messing вокруг (это бит меня): Qt выравнивает все свои строки на 32 бит, а это означает, что если количество байтов на строку для изображения не делится на 4, в данные будут вставлены дерьмы. Возможно, есть еще больше gotchas ... –
Другой маршрут будет:
- Загрузить данные изображения в массив Numpy (example code с помощью PIL)
- Манипулирование изображение с помощью NumPy, SciPy или scikits.image
- Загрузка данных в QImage (пример: просматривать архив scikits.image (связанный в 1) и смотреть на линию 45 qt_plugin.py - извините, StackOverflow не позволит мне размещать больше ссылок пока)
As Вирджил упоминает, что данные должны быть 32-битными (или 4-байтовыми), что означает, что вам нужно помнить о том, чтобы указать шаги на шаге 3 (как показано в фрагменте).
Можете ли вы добавить еще одну ссылку? (Назад, когда у меня была эта проблема, я только что опубликовал другой ответ, чтобы провести вторую ссылку ;-) – SamB
Конечно, вот оно: 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()
Thanks Eli Bendersky, ваш код был полезным.
Вы забыли добавить четыре пробела перед каждой строкой кода (и поставить только одну новую строку между строками). – 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 в OpenCV2 image
- 2. Преобразование изображения из pygame в PIL image
- 3. Преобразование Python Opencv Image (numpy array) в PyQt QPixmap image
- 4. PIL Image Library Python
- 5. PIL Image to QPixmap conversion issue
- 6. PIL: Преобразование Bytearray в изображение
- 7. Аффинное преобразование Python/PIL
- 8. PIL удалить background image from
- 9. Преобразование изображения PIL в изображение VIPS
- 10. Преобразование PIL GdkPixbuf
- 11. Преобразование изображения PIL в bytearray
- 12. Преобразование оси пикселей в PIL
- 13. Преобразование изображения PIL в MIMEImage
- 14. Преобразование изображения PIL в skimage?
- 15. Как использовать преобразование из PIL в Python
- 16. Преобразование массива NumPy в изображение PIL
- 17. PIL в py2exe: 'no module named Image'
- 18. from PIL import Image - ImportError: Нет модуля с именем PIL
- 19. PyQt: QImage() возвращает 'Null'-Image
- 20. Ошибка при рисовании QImage на виджет с PIL и PyQt
- 21. Преобразование python2 PIL в код python3
- 22. Преобразование идентичности преобразует изображение в PIL
- 23. PIL - Преобразование Frames GIF в JPG
- 24. Python PIL Image Module ImportError: Нет модуля с именем PIL, нет модуля с именем Image
- 25. Django - как установить Python Image Library (PIL)
- 26. python pil image to django imagefield convert
- 27. PIL image to sqlite3 blob and reverse?
- 28. Python loop для модуля image и pil
- 29. Python3 PIL IMAGE модуль и метаклассом
- 30. Python PIL Image in Label auto resize
Это также работает в Python3, просто измените «cStringIO.StringIO» на «io.BytesIO». – mzuther