Encuentra una ventana deslizante de 3x3 sobre una imagen

Tengo una imagen

Quiero obtener una ventana de 3x3 (píxeles adyacentes) para cada píxel en la imagen.

Tengo este código de Python:

for x in range(2,r-1,1):
    for y in range(2,c-1,1):
        mask5=numpy.array([cv.Get2D(copy_img,x-1,y-1),cv.Get2D(copy_img,x-1,y),cv.Get2D(copy_img,x-1,y+1),cv.Get2D(copy_img,x,y-1),cv.Get2D(copy_img,x,y),cv.Get2D(copy_img,x,y+1),cv.Get2D(copy_img,x+1,y-1),cv.Get2D(copy_img,x+1,y),cv.Get2D(copy_img,x+1,y+1)])
        cent=[cv.Get2D(copy_img,x,y)]

mask5 es la ventana de 3x3. cent es el píxel central.

¿Hay una forma más eficiente de hacerlo, es decir, usar mapas, iteradores, cualquier cosa que no sean los dos bucles anidados que he usado?

Respuestas a la pregunta(3)

Su respuesta a la pregunta