在 qt 应用程序中显示 skimage 输出

Show skimage output in qt application

我正在使用 skimage 通过他们的 numpy 操作来做一些图像操作。我可以对我的像素进行数学运算,然后使用

显示结果
def image_manip():
    # do manipulations
    return final_image
viewer = ImageViewer(image_manip())
viewer.show()

同时,在不同的应用程序中,我可以使用以下方法在 QT 中显示图像:

self.pixmap = QtGui.QPixmap('ImagePath.jpg')

理想情况下,我想将两者结合成这样:

def image_manip():
    # do manipulations
    return final_image

self.pixmap = QtGui.QPixmap(image_manip())

显然这是行不通的。我得到一个错误 TypeError: QPixmap(): argument 1 has unexpected type 'numpy.ndarray'

我的猜测是 viewer = ImageViewer(image_manip())viewer.show() 有一些魔法可以直接读取 skimage/numpy 对象。在我的用例中,我不想将文件保存在 skimage 之外(我只想将其保存在内存中),所以我想它需要 'baked out' 这样 Qt 就可以将其作为通用格式读取.

我该怎么做?

您可以按如下方式将 uint8 numpy 数组(形状 M, N, 3 RGB 图像)转换为 QPixmap:

from skimage import img_as_ubyte

arr = img_as_ubyte(arr)
img = QImage(arr.data, arr.shape[1], arr.shape[0],
             arr.strides[0], QImage.Format_RGB888)
pixmap = QPixmap.fromImage(img)