【发布时间】:2014-11-15 08:40:39
【问题描述】:
尽管不是一个熟练的 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_()
【问题讨论】:
-
去掉平移的部分会更好。只有关于颜色的部分对问题很重要。
-
我不同意。我知道如何显示静态彩色图像,但不是在还提供内置方便平移、缩放和使用鼠标获取像素坐标的包中。这个问题的确切点是是否存在一个框架(或编程技巧),它允许我轻松地完成所有这些事情,而无需至少两倍的代码行和八倍的 GUI 编程知识。如果这种看似显而易见的组合根本不存在,那将回答我的问题。
-
也许我误解了,但肯定足以说明您正在使用 Qt。我只是说稍微缩短代码及其前面的文本可能会更好。不过,我个人并不了解 Qt,所以我不能真正说出来。
标签: python image qt mouseevent pyqtgraph