Python Matplotlib imshow缩放功能?
我用imshow()查看了几个(27)个以2D数组表示的图像。我需要放大每个图像中完全相同的点。我知道我可以手动缩放,但这很乏味,不够精确。有没有一种方法可以通过编程指定要显示的图像的特定部分而不是整个图像?您可以使用Python Matplotlib imshow缩放功能?,python,image,matplotlib,Python,Image,Matplotlib,我用imshow()查看了几个(27)个以2D数组表示的图像。我需要放大每个图像中完全相同的点。我知道我可以手动缩放,但这很乏味,不够精确。有没有一种方法可以通过编程指定要显示的图像的特定部分而不是整个图像?您可以使用plt.xlim和plt.ylim设置要打印的区域: import matplotlib.pyplot as plt import numpy as np data=np.arange(9).reshape((3,3)) plt.imshow(data) plt.xlim(0.5
plt.xlim
和plt.ylim
设置要打印的区域:
import matplotlib.pyplot as plt
import numpy as np
data=np.arange(9).reshape((3,3))
plt.imshow(data)
plt.xlim(0.5, 1.5)
plt.ylim(0.5,1.5)
plt.show()
如果不需要图像的其余部分,可以定义一个函数,在所需坐标处裁剪图像,然后显示裁剪后的图像 注意:这里的“x”和“y”是可视的x和y(分别是图像上的水平轴和垂直轴),这意味着它与数组的实际x(行)和y(列)相反
谢谢我意识到我也可以裁剪数组预显示,但您的方法保留了数组的其余部分。
import scipy as sp
import numpy as np
import matplotlib.pyplot as plt
def crop(image, x1, x2, y1, y2):
"""
Return the cropped image at the x1, x2, y1, y2 coordinates
"""
if x2 == -1:
x2=image.shape[1]-1
if y2 == -1:
y2=image.shape[0]-1
mask = np.zeros(image.shape)
mask[y1:y2+1, x1:x2+1]=1
m = mask>0
return image[m].reshape((y2+1-y1, x2+1-x1))
image = sp.lena()
image_cropped = crop(image, 240, 290, 255, 272)
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
ax1.imshow(image)
ax2.imshow(image_cropped)
plt.show()