Matplotlib imshow 缩放功能?

22 投票
2 回答
33170 浏览
提问于 2025-04-17 03:44

我有27张图片,它们都是用二维数组表示的,我用imshow()来查看这些图片。我需要在每张图片上放大同一个地方。我知道可以手动放大,但这样太麻烦了,而且不够精确。有没有办法可以通过编程来指定显示图片的某个特定区域,而不是整个图片呢?

2 个回答

5

如果你不需要图片的其他部分,可以定义一个函数,按照你想要的坐标裁剪图片,然后显示裁剪后的图片。

注意:这里的'x'和'y'是指图片上的视觉坐标(x是水平轴,y是垂直轴),这和NumPy数组的实际坐标(行和列)是相反的。

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()
22

你可以使用 plt.xlimplt.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()

撰写回答