我有一个巨大的数字阵列,其形状(mxnx3)和数据类型float32
。我希望图像简单地显示在一个wx.Frame
中,它附加了一个wx.ScrolledWindow
。我想要100%变焦的图像,这是非常重要的,没有数据丢失发生。这些是超高分辨率x射线图像,需要保持为浮点值。在
{cd4{ndays只接受到目前为止的整数能力。无益。在
PIL图像库也只能处理8位,这还不够。在
到目前为止,我发现唯一足够的库是matplotlib,但是我在让matplotlib以我想要的方式显示时遇到了困难。这让我很接近:
class View(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,
parent=None,
title="DICOM Viewer",
size=(1280, 750),
pos=(0,0))
self.scroll = wx.ScrolledWindow(self, -1)
self.figure = plt.Figure()
self.canvas = FigureCanvasWxAgg(self.scroll, -1, self.figure)
self.axes = Axes(self.figure, [0,1,0,1])
self.figure.figimage(ndarray)
self.sizer.Add(self.canvas, 1, wx.EXPAND)
self.scroll.SetSizer(self.sizer)
figimage函数只显示原始像素,这是我想要的,但是它只填充wxFrame的可视区域,速度非常慢。也许是我的wx小部件有问题?在
更好的解决方案是使用imshow:
^{pr2}$但是,这给了我大量的填充,不必要的轴和标签,它自动缩放图像以适应可视区域。像素质量仍然存在,但需要添加mpl工具栏和手动平移,如果平移太远,可能会丢失图像的轨迹。在
我找到了一个解决方案:
所以关键是手动设置图形的大小为图像的全尺寸(以英寸为单位),然后将图形的轴设置为相同的大小。这就阻止了mpl自动调整图像大小到可视区域。我也放弃了sizer,因为我手动调整了滚动条的虚拟区域、图形和轴的大小。现在只要我能去掉上面的填充物,我就都准备好了。在
相关问题 更多 >
编程相关推荐