2016-06-24 23 views
0

私は最初のPyQtプログラムに取り組んでいて、ImageItemsやGraphicsScenesについて明白なものがないと感じています。 ImageViewを使用してPyQtGraphで2次元ImageItemを表示しました。私のデータは数が少ない配列です。画像上のある場所にマウスを置くと、xとyの位置値を取得できますが、画像/ z /配列の値も知りたいと思います。 xとyの値を取得する方法を示した似たような質問は見つかったが、画像の値は見つからなかった。私はPyqt4とPython 2.7で現在Windowsで使用しているコードと、他の投稿へのリンクを含めました。pyqtgraphからイメージアイテムの値を取得する

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よりも優れた方法があれば、それも知っているといいでしょう。

答えて

2

ImageView.setDataを見ると、imageのメンバーがデータを格納しているようです。

パブリックメンバーであっても、いいゲッタープロパティではなく、ドキュメント化されていません。使用したくない場合は、クラスのデータへの参照を保存する必要があります。つまり、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") 
+0

これは素晴らしいアイデアでした。それは完全に動作します。どうもありがとうございました。 – hobozero

関連する問題