【发布时间】:2016-05-28 12:01:26
【问题描述】:
TL;DR:您只需要阅读“更新”部分。
如何将
numpy.random.random((256, 256))作为颜色图输出到 qt 场景?
这是摘要的摘要。
更新:
以下内容为我提供了我想要保存到文件的颜色图。
scaled_image = Image.fromarray(np.uint8(self.image*255))
plt.savefig("/home/test.png")
self.image 是 256x256 的 numpy 数组,它的所有值都在 -1 和 1 之间。
如何在 Qt 中将此图像输出到场景中?你可以使用self.image = numpy.random.random((256, 256)) 有一个和我类似的起点。如何将 2D numpy 随机值数组作为颜色图放到 pyqt 场景中?
24/02/1016 更新
如此接近。这似乎有效,但规模已经倒转。蓝色现在很热,红色很冷。如何切换它以使其看起来像上图?
scene = QGraphicsScene(self)
scaled_image = Image.fromarray(np.uint8(self.image*255))
gcf().canvas.draw() # IMPORTANT!
stringBuffer = gcf().canvas.buffer_rgba() # IMPORTANT!
l, b, w, h = gcf().bbox.bounds
qImage = QtGui.QImage(stringBuffer,
w,
h,
QtGui.QImage.Format_ARGB32)
pixmap = QtGui.QPixmap.fromImage(qImage)
pixmapItem = QtGui.QGraphicsPixmapItem(pixmap)
scene.addItem(pixmapItem)
self.graphicsView.setScene(scene)
我在 2016 年 2 月 23 日尝试了什么
下面给了我一个空白屏幕
scene = QGraphicsScene(self)
scaled_image = Image.fromarray(np.uint8(self.image*255))
pixMap = QPixmap(scaled_image)
scene.addPixmap(pixMap)
self.graphicsView.setScene(scene)
下面给我一个灰度输出到 Qt 场景。为什么不是彩色的?
scene = QGraphicsScene(self)
scaled_image = Image.fromarray(np.uint8(self.image*255))
imgQ = ImageQt(scaled_image)
pixMap = QtGui.QPixmap.fromImage(imgQ)
scene.addPixmap(pixMap)
self.graphicsView.setScene(scene)
我从颜色图问题here 的解决方案进行逆向工程并显示图像here。
使用已发布解决方案的建议,我尝试先创建一个QGraphicsPixmapItem,然后将该项目添加到场景中。官方文档有点混乱,所以我终于从更清晰的pyside docs 中得到了我需要的东西。可悲的是,我得到了与上面相同的灰度。代码如下:
scene = QGraphicsScene(self)
scaled_image = Image.fromarray(np.uint8(self.image*255))
imgQ = ImageQt(scaled_image)
pixMap = QtGui.QPixmap.fromImage(imgQ)
pixMapItem = QtGui.QGraphicsPixmapItem(pixMap)
scene.addItem(pixMapItem)
self.graphicsView.setScene(scene)
我尝试过的其他事情(旧):
self.image 是 numpy 二维数组,它的所有值都在 -1 和 1 之间。
我按如下缩放并得到灰度图像。但是,我想要一个颜色图:
scene = QGraphicsScene(self)
scaled_image = (self.image + 1) * (255 / 2)
scene.addPixmap(QPixmap.fromImage(qimage2ndarray.array2qimage(scaled_image)))
self.graphicsView.setScene(scene)
#min(self.image) = -0.64462
#max(self.image) = 1.0
如果我改为执行以下操作,我会得到我想要的颜色图,例如我之前开发的 Web 应用程序的下图中
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> imgplot = ax.imshow(self.image)
如何将颜色图添加到 qt 场景,而不仅仅是灰度?
【问题讨论】:
标签: python qt matplotlib pyqt4