不缩放显示图像

2024-06-24 12:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

现在我需要的是这两者的结合——像fig.figshow那样显示图像1:1,添加plt.imshow()添加的轴,并像plt.imshow()那样显示居中的图像。在

我怎么能做到呢? 或者换句话说:如何告诉plt.imshow()fig.figimage()那样显示im图像?在

演示问题的示例代码:

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像素,实际大小取决于窗口的大小。 enter image description here

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

enter image description here


Tags: 图像import屏幕asshownpfigplt
1条回答
网友
1楼 · 发布于 2024-06-24 12:45:58

你需要自己做一点计算。 比方说,您希望所有边都有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()

enter image description here

请注意,要获得一个维度为width和高度为height的图像,您需要一个数组np.zeros((height, width)),而不是相反的数组。在

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

^{pr2}$

相关问题 更多 >