Laden Sie nur einen Teil eines Bildes in Python

Das mag eine dumme Frage sein, aber ...

Ich habe mehrere tausend Bilder, die ich in Python laden und dann in numpy Arrays konvertieren möchte. Offensichtlich geht das etwas langsam. Eigentlich interessiere ich mich aber nur für einen kleinen Teil jedes Bildes. (Der gleiche Bereich, nur 100 x 100 Pixel in der Bildmitte.)

Gibt es eine Möglichkeit, nur einen Teil des Bildes zu laden, damit die Dinge schneller laufen?

Hier ist ein Beispielcode, in dem ich einige Beispielbilder generiere, speichere und wieder lade.

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)