Преобразование PyQt в PIL изображение
У меня есть изображение в QImage, и я хочу обработать его в PIL, прежде чем отображать его. В то время как класс ImageQT позволяет мне преобразовать изображение PIL в QImage, не похоже, чтобы что-то шло от QImage к изображению PIL.
5 ответов:
Я преобразую его из 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)
Я перепробовал много комбинаций, прежде чем заставить его работать.
Другой маршрут будет:
- загрузите данные изображения в массив numpy (пример кода с использованием PIL)
- манипулируйте изображением с помощью numpy, scipy или scikits.изображение
- загрузите данные в QImage (пример: просмотрите scikits.архив изображений (связанный в 1) и посмотрите на строке 45 из qt_plugin.py -- извините, stackoverflow пока не позволяет мне размещать больше ссылок)
Как упоминает Вирджил, данные должны быть выровнены по 32 битам (или 4 байтам), что означает, что вам нужно не забудьте указать шаги в шаге 3 (как показано в фрагменте).
#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()