Matplotlib imshow缩放功能?

And*_*ruf 18 python image matplotlib

我用imshow()查看的2D数组中有几个(27)图像.我需要放大每个图像中的完全相同的位置.我知道我可以手动缩放,但这很乏味且不够精确.有没有办法以编程方式指定图像的特定部分来显示而不是整个事物?

unu*_*tbu 17

您可以使用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()
Run Code Online (Sandbox Code Playgroud)


gca*_*tes 5

如果不需要图像的其余部分,您可以定义一个函数,在所需的坐标处裁剪图像,然后显示裁剪后的图像。

注意:这里的“x”和“y”是视觉上的x和y(分别是图像上的水平轴和垂直轴),这意味着它与NumPy的真实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()
Run Code Online (Sandbox Code Playgroud)