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

Posted

技术标签:

【中文标题】在 qt 应用程序中显示 skimage 输出【英文标题】:Show skimage output in qt application 【发布时间】:2017-10-15 18:40:42 【问题描述】:

我正在使用 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 中保存文件(我只想将它保存在内存中),所以我想它需要被“烘焙”,以便 Qt 可以将它作为一种通用格式读取。

我该怎么做?

【问题讨论】:

Convert Python Opencv Image (numpy array) to PyQt QPixmap image的可能重复 【参考方案1】:

您可以将 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)

【讨论】:

我最终以不同的方式实现它,但是是的!这行得通!您的答案与建议的重复答案的区别是img_as_ubyte ...否则,图像只是一堆彩色像素:-)谢谢!

以上是关于在 qt 应用程序中显示 skimage 输出的主要内容,如果未能解决你的问题,请参考以下文章

from skimage.viewer.qt.QtCore import Qt ImportError: No module named QtCore

QT Creator里printf函数输出到“应用程序输出”界面?

Skimage:如何显示图像

Qt 小部件应用程序输出到控制台

为啥 scikit-skimage 示例中的距离图不显示?

如何在不将其连接到终端的情况下运行“屏幕”,以便可以在 C++ (qt) 应用程序中捕获输出?