2011-10-05 6 views
14

저는 imshow()로보고있는 2D 배열로 표현 된 여러 개의 이미지가 있습니다. 모든 이미지에서 똑같은 부분을 확대해야합니다. 수동으로 확대/축소 할 수는 있지만이 작업은 지루하고 정확하지 않습니다. 프로그래밍 방식으로 이미지의 특정 부분을 지정하여 전체 내용 대신 표시하도록 할 수 있습니까?Matplotlib imshow zoom 기능?

답변

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

훌륭한 소개 * [과학용 파이썬 시작하기] (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()