不缩放显示图像

Stefan.at.wpf

给定一个500x500像素的图像,我想在屏幕上以1:1的比例显示该图像。另外,我想有一个x和y轴。

  • plt.imshow() 自动将轴添加到我的图像并在窗口中将图像居中,但是图像已缩放并且在屏幕上未显示为500x500像素。
  • fig.figimage()在我的屏幕上显示1:1的图像,但不添加轴,并且在窗口的左下角显示图像。特别是最大化窗口/调整窗口大小不会改变图像的大小。

现在,我需要两者的结合–像1:1那样显示图像fig.figshow,添加相加的轴plt.imshow()并像中间那样显示图像plt.imshow()

我怎样才能做到这一点?或换句话说:如何分辨plt.imshow()显示未缩放的图像fig.figimage()

演示此问题的示例代码:

import matplotlib.pyplot as plt
import numpy as np

width=500;
height=500;

# using plt.imshow()
dummyImage = np.zeros((width, height))
plt.imshow(dummyImage)
plt.show()

# using fig.figimage()
fig = plt.figure(figsize=(width, height))
fig.figimage(dummyImage)
plt.show()

结果:

使用plt.imshow():不完全是500x500像素,实际大小取决于窗口的大小。在此处输入图片说明

使用fig.figimage():精确到500x500像素,与窗口大小无关

在此处输入图片说明

认真的重要性

您将需要自己做一点计算。假设您要在所有面上留出50像素的边距,并且dpi为100,然后可以将图形尺寸计算为figsize=((width+2*margin)/dpi, (height+2*margin)/dpi)英寸。然后,您需要计算边界,例如,左边的边界将由边距除以dpi除以图形宽度。您可以为图形设置计算出的图形尺寸(的figsize参数plt.figure())和边框(使用subplots_adjust)。

import matplotlib.pyplot as plt
import numpy as np

width=500 # pixels
height=150
margin=50 # pixels
dpi=100. # dots per inch

figsize=((width+2*margin)/dpi, (height+2*margin)/dpi) # inches
left = margin/dpi/figsize[0] #axes ratio
bottom = margin/dpi/figsize[1]

fig = plt.figure(figsize=figsize, dpi=dpi)
fig.subplots_adjust(left=left, bottom=bottom, right=1.-left, top=1.-bottom)

dummyImage = np.zeros((height, width))
plt.imshow(dummyImage)
plt.show()

在此处输入图片说明

请注意,要获得具有widthwidth和height尺寸的图像height,您需要一个数组np.zeros((height, width)),而不是逆数组

为了确保图形保持其原始大小,可以添加以下代码,以便在每次更改图形大小时将图形重新调整为原始大小:

def update(event=None):
    fig.set_size_inches(figsize)

update()
ci = fig.canvas.mpl_connect("resize_event", update)
plt.show()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章