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

3

pyqtgraph.ImageView确实支持 rgb / rgba 图像。例如:

import numpy as np
import pyqtgraph as pg
data = np.random.randint(255, size=(100, 100, 3))
pg.image(data)

..如果您想在不自动调整电平的情况下显示准确的图像数据:

pg.image(data, levels=(0, 255))
于 2014-09-22T13:26:09.313 回答
1

正如 Luke 所指出的,如果传递了正确的数组形状,ImageView()确实显示 RGB。在我的示例程序中,我应该使用 photo.transpose([1,0,2]) 将 RGB 保持在最后一个维度,而不仅仅是 photo.transpose()。当 ImageView 遇到一个维度为 (3, W, H) 的数组时,它会将数组视为由 3 个单色图像组成的视频,底部有一个滑块来选择帧。

(更正以纳入卢克的后续评论,如下)

于 2014-09-23T23:03:20.700 回答