Cargar solo parte de una imagen en python

Esta podría ser una pregunta tonta, pero ...

Tengo varios miles de imágenes que me gustaría cargar en Python y luego convertirlas en múltiples matrices. Obviamente esto va un poco despacio. Pero, en realidad solo estoy interesado en una pequeña porción de cada imagen. (La misma porción, solo 100x100 píxeles en el centro de la imagen).

¿Hay alguna forma de cargar solo una parte de la imagen para que las cosas vayan más rápido?

Aquí hay un código de muestra donde genero algunas imágenes de muestra, las guardo y las vuelvo a cargar.

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)

Respuestas a la pregunta(4)

Su respuesta a la pregunta