2011-10-05 154 views
14

我有幾個(27)用二維數組表示的圖像,我用imshow()查看。我需要放大每個圖像中完全相同的點。我知道我可以手動縮放,但這很乏味而且不夠精確。有沒有辦法以編程方式指定圖像的特定部分來顯示而不是整個東西?Matplotlib imshow縮放功能?

回答

11

你可以使用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() 
+0

謝謝!我意識到我也可以裁剪數組的預顯示,但是您的方法會保留數組的其餘部分。 – Andruf

+0

在精彩的介紹* [Python科學入門](http://scipy-lectures.github.io/)*中,它位於matplotlib部分* [1.4。 Matplotlib:繪圖,1.4.2.4。設置限制](http://scipy-lectures.github.io/intro/matplotlib/matplotlib.html#setting-limits)*。 –

3

如果你不需要你的圖像的其餘部分,你可以定義你想要的座標裁剪圖像的功能然後顯示裁剪的圖像。注意:這裏'x'和'y'是視覺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()