Вот ответ для тех, кто использует PySide2 5.x
, официальную упаковку Python для qt. Они также должны работать на PyQt 5.x
Я также добавил к QImage
к numpy
, которые я использовал в связи с этим. Я предпочитаю использовать зависимость PIL
, главным образом потому, что мне не нужно отслеживать изменения цветовых каналов.
from PySide2 import QtCore, QtGui
from PIL import Image
import io
def qimage_to_pimage(qimage: QtGui.QImage) -> Image:
"""
Convert qimage to PIL.Image
Code adapted from SO:
https://stackoverflow.com/a/1756587/7330813
"""
bio = io.BytesIO()
bfr = QtCore.QBuffer()
bfr.open(QtCore.QIODevice.ReadWrite)
qimage.save(bfr, 'PNG')
bytearr = bfr.data()
bio.write(bytearr.data())
bfr.close()
bio.seek(0)
img = Image.open(bio)
return img
Здесь можно преобразовать numpy.ndarray
в QImage
from PIL import Image, ImageQt
import numpy as np
def array_to_qimage(arr: np.ndarray):
"Convert numpy array to QImage"
img = Image.fromarray(arr)
return ImageQt.ImageQt(img)