我想使用imshow显示一个图像文件。这是一个1600x1200灰度图像,我发现matplotlib使用float32来解码这些值。它需要大约2秒来加载图像,我想知道是否有任何方法使这个速度更快。重点是我不需要高分辨率的图像,我只是想标记某些点,并绘制图像作为背景。所以,
我的代码:
import matplotlib
import numpy
plotfig = matplotlib.pyplot.figure()
plotwindow = plotfig.add_subplot(111)
plotwindow.axis([0,1600,0,1200])
plotwindow.invert_yaxis()
img = matplotlib.pyplot.imread("lowres.png")
im = matplotlib.pyplot.imshow(img,cmap=matplotlib.cm.gray,origin='centre')
plotfig.set_figwidth(200.0)
plotfig.canvas.draw()
matplotlib.pyplot.show()这就是我想做的。现在,如果保存在lowres.png中的图片的分辨率较低,为1600x1200 (即400x300),它将以应有的方式显示在上角。我怎么能把它缩放到1600x1200像素的整体呢?如果我运行这个程序,慢部分来自下面的canvas.draw()命令。有没有办法加快这个命令的速度?
提前谢谢你!
根据您的建议,更新到了matplotlib的最新版本
版本1.1.0svn,签出8988
我还使用了以下代码:
img = matplotlib.pyplot.imread(pngfile)
img *= 255
img2 = img.astype(numpy.uint8)
im = self.plotwindow.imshow(img2,cmap=matplotlib.cm.gray, origin='centre')不过,显示图像需要大约2秒.还有其他想法吗?
只是想补充一下:我找到了以下特性
轴轴
因此,在原则上matplotlib应该能够完成任务。在那里人们也可以用“放大”的方式来绘制一幅画.
发布于 2011-02-20 19:05:24
数据的大小与最终图像的像素尺寸无关。
因为你说你不需要高分辨率的图像,所以你可以通过对数据进行下采样来更快地生成图像。如果您的数据以numpy数组的形式出现,那么一种快速而肮脏的方式就是使用nth列和data[::n,::n]来获取每个行。
您可以使用fig.set_size_inches和plt.savefig的dpi参数来控制输出图像的像素尺寸:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
data=np.arange(300).reshape((10,30))
plt.imshow(data[::2,::2],cmap=cm.Greys)
fig=plt.gcf()
# Unfortunately, had to find these numbers through trial and error
fig.set_size_inches(5.163,3.75)
ax=plt.gca()
extent=ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('/tmp/test.png', dpi=400,
bbox_inches=extent)

发布于 2016-11-22 10:24:35
可以通过将以下行添加到matplotlibrc文件(通常在~/..matplotlib/matplotlibrc)中禁用imshow的默认内插:
image.interpolation :无
其结果是更快的渲染和清晰的图像。
发布于 2011-02-22 01:28:13
我找到了一个解决方案,只要一个人只需要显示低分辨率的图像。我们可以使用行来实现这一点。
im = matplotlib.pyplot.imshow(img,cmap=matplotlib.cm.gray, origin='centre',extent=(0,1600,0,1200))其中,区段参数告诉matplotlib在此范围内绘制图形。如果使用分辨率较低的图像,这将大大加快处理速度。尽管如此,如果有人知道更多的技巧,使这个过程更快,以便以同样的速度使用更高的分辨率,那就太好了。
感谢每一个思考我的问题的人,更多的评论是非常感谢的!
https://stackoverflow.com/questions/5059175
复制相似问题