Załaduj tylko część obrazu w Pythonie

To może być głupie pytanie, ale ...

Mam kilka tysięcy obrazów, które chciałbym załadować do Pythona, a następnie przekonwertować na tablice numpy. Oczywiście to idzie trochę powoli. Ale interesuje mnie tylko niewielka część każdego obrazu. (Ta sama część, zaledwie 100 x 100 pikseli w środku obrazu).

Czy jest jakiś sposób, aby załadować tylko część obrazu, aby wszystko przyspieszyło?

Oto przykładowy kod, w którym generuję przykładowe obrazy, zapisuję je i ładuję z powrotem.

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)

questionAnswers(4)

yourAnswerToTheQuestion