从pyqtgraph获取imageitem值

时间:2016-06-24 20:46:45

标签: python pyqt pyqtgraph

我正在研究我的第一个PyQt程序,感觉我错过了一些关于ImageItems或GraphicsScenes的明显信息。我有一个使用ImageView与PyQtGraph一起显示的2d ImageItem。我的数据是一个numpy数组。当鼠标悬停在图像上的某个点上时,我能够获得x和y位置值,但还想知道image / z / array值。我发现了一个类似的问题,显示了如何获取x和y值,但不是图像值。我将目前使用的代码包含在Windows中的PyQt4和python 2.7以及其他帖子的链接中。

https://groups.google.com/forum/#!topic/pyqtgraph/srQqVW9bqPg

    import pyqtgraph as pg

    self.image = pg.ImageView(self)
    self.image.show()
    self.image.setImage(data)

    self.image.scene.sigMouseMoved.connect(self.mouseMoved)

    def mouseMoved(self, pos):
        x = self.image.getImageItem().mapFromScene(pos).x()
        y = self.image.getImageItem().mapFromScene(pos).y()

这会得到x和y的值,但我不知道如何将它们转换为数组索引或者只是以其他方式获取z值。如果有比mapFromScene更好的方法,那么也很高兴知道。

1 个答案:

答案 0 :(得分:3)

查看ImageView.setData的{​​{3}},似乎image成员用于存储数据。

即使它是公共成员,它也不是一个好的getter属性,也没有记录。如果您不喜欢使用它,则可能需要在类中存储对数据的引用。也就是说,成为self.data成员。

def mouseMoved(self, viewPos):

    data = self.image.image  # or use a self.data member
    nRows, nCols = data.shape 

    scenePos = self.image.getImageItem().mapFromScene(viewPos)
    row, col = int(scenePos.y()), int(scenePos.x())

    if (0 <= row < nRows) and (0 <= col < nCols):
        value = data[row, col]
        print("pos = ({:d}, {:d}), value = {!r}".format(row, col, value))
    else:
        print("no data at cursor")