Fast capture and 2D image stacking as 3D numpy array with Python and Raspberry Pi

Mark Lawrence breamoreboy at
Mon Jul 6 23:59:53 CEST 2015

On 06/07/2015 22:31, Agustin Cruz wrote:
> I'm working on a Python - Raspberry Pi project in which I need to take about 30 images per second (no movie) and stack each 2D image to a 3D array using numpy array, without saving each 2D capture as a file (because is slow).
> I found this Python code to take images as fast as possible, but i don't know how to stack all images fast to a 3D stack of images.
> import io
> import time
> import picamera
> #from PIL import Image
> def outputs():
>      stream = io.BytesIO()
>      for i in range(40):
>          # This returns the stream for the camera to capture to
>          yield stream
>          # Once the capture is complete, the loop continues here
>          # (read up on generator functions in Python to understand
>          # the yield statement). Here you could do some processing
>          # on the image...
>          #img =
>          # Finally, reset the stream for the next capture
>          stream.truncate()
> with picamera.PiCamera() as camera:
>      camera.resolution = (640, 480)
>      camera.framerate = 80
>      time.sleep(2)
>      start = time.time()
>      camera.capture_sequence(outputs(), 'jpeg', use_video_port=True)
>      finish = time.time()
>      print('Captured 40 images at %.2ffps' % (40 / (finish - start)))
> Does anyone of you know how to stack the 2D images taken in this code to a 3D numpy array using Python and the Raspberry Pi camera module? Without saving each 2D capture as a file
> Best regards, Agustín
> is 
the first hit on google for "numpy 3d array stack".

My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

More information about the Python-list mailing list