Carregar apenas parte de uma imagem em python

Esta pode ser uma pergunta boba, mas ...

Eu tenho milhares de imagens que gostaria de carregar no Python e depois converter em matrizes numpy. Obviamente, isso vai um pouco devagar. Mas, na verdade, estou interessado apenas em uma pequena parte de cada imagem. (A mesma parte, apenas 100x100 pixels no centro da imagem.)

Existe alguma maneira de carregar apenas parte da imagem para tornar as coisas mais rápidas?

Aqui está um exemplo de código em que eu gero algumas imagens de amostra, salve-as e as carrego de volta.

import numpy as np
import matplotlib.pyplot as plt
import Image, time

#Generate sample images
num_images = 5

for i in range(0,num_images):
    Z = np.random.rand(2000,2000)
    print 'saving %i'%i
    plt.imsave('%03i.png'%i,Z)

%load the images
for i in range(0,num_images):
    t = time.time()

    im = Image.open('%03i.png'%i)
    w,h = im.size
    imc = im.crop((w-50,h-50,w+50,h+50))

    print 'Time to open: %.4f seconds'%(time.time()-t)

    #convert them to numpy arrays
    data = np.array(imc)