2

熟練した GUI プログラマーではありませんが、pyqtgraph モジュールの ImageView 関数を使用して、正確なピクセル座標を取得するためにパン/ズームしてクリックできる画像を表示する方法を見つけました。完全なコードを以下に示します。唯一の問題は、ImageView が明らかに単一チャネル (モノクロ) の画像しか表示できないことです。

私の質問:このプログラムとまったく同じことを行うにはどうすればよいですか(実際には必要のないヒストグラム、ノルム、およびROI機能を無視します)が、トゥルーカラー画像(元のJPEG写真など)を表示するオプションがあります)?

    import numpy as np
    from pyqtgraph.Qt import QtCore, QtGui
    import pyqtgraph as pg
    import matplotlib.image as mpimg

    # Load image from disk and reorient it for viewing

    fname = 'R0000187.JPG'    # This can be any photo image file
    photo=np.array(mpimg.imread(fname))
    photo = photo.transpose()
    # select for red color and extract as monochrome image
    img = photo[0,:,:]  # WHAT IF I WANT TO DISPLAY THE ORIGINAL RGB IMAGE?

    # Create app
    app = QtGui.QApplication([])

    ## Create window with ImageView widget
    win = QtGui.QMainWindow()
    win.resize(1200,800)
    imv = pg.ImageView()
    win.setCentralWidget(imv)
    win.show()
    win.setWindowTitle(fname)


    ## Display the data 
    imv.setImage(img)

    def click(event):
        event.accept()  
        pos = event.pos()
        print (int(pos.x()),int(pos.y()))

    imv.getImageItem().mouseClickEvent = click

    ## Start Qt event loop unless running in interactive mode.
    if __name__ == '__main__':
        import sys
        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()
4

2 に答える 2

1

Luke が指摘したように、ImageView()、正しい配列形状が渡された場合、RGB を表示します。私のサンプル プログラムでは、単なる photo.transpose() ではなく、最後の次元に RGB を保持するために photo.transpose([1,0,2]) を使用する必要がありました。ImageView が次元 (3、W、H) の配列に直面すると、配列を 3 つのモノクロ画像で構成されるビデオとして扱い、下部にフレームを選択するスライダーを配置します。

(以下のルークによるフォローアップコメントを組み込むために修正されました)

于 2014-09-23T23:03:20.700 に答える