In [1]:
import time
import picam
import pylab
from datetime import datetime
from PIL import Image, ImageChops

In [2]:
#picam.config.awbMode = picam.MMAL_PARAM_AWBMODE_OFF
#picam.config.awbMode = picam.MMAL_PARAM_AWBMODE_INCANDESCENT
picam.config.awbMode = picam.MMAL_PARAM_AWBMODE_SUNLIGHT


# picam.config.exposure = picam.MMAL_PARAM_EXPOSUREMODE_OFF
# picam.config.exposure = picam.MMAL_PARAM_EXPOSUREMODE_VERYLONG
picam.config.exposure = picam.MMAL_PARAM_EXPOSUREMODE_SPORTS


picam.config.imageFX = picam.MMAL_PARAM_IMAGEFX_NONE
# picam.config.imageFX = picam.MMAL_PARAM_IMAGEFX_SKETCH
# picam.config.imageFX = picam.MMAL_PARAM_IMAGEFX_DENOISE

picam.config.meterMode = picam.MMAL_PARAM_EXPOSUREMETERINGMODE_MATRIX


#picam.config.shutterSpeed = 2e3         # 0 = auto, otherwise the shutter speed in ms
#picam.config.ISO = 100
picam.config.shutterSpeed = 0
picam.config.ISO = 100

In [3]:
def simple():
    picam.config.shutterSpeed = 2e3 #0
    picam.config.ISO = 800
    return picam.takePhoto()
pylab.figure(figsize=(12,12))
pylab.imshow(simple(), origin='lower')
None


Out[3]:
<matplotlib.image.AxesImage at 0x2069f30>

In [4]:
def stack(filename='/tmp/test.jpg', n=10):
    print 'Frame: ',
    for i in range(n):
        print i,
        im = picam.takePhoto()
#         im = im.resize((640,480), Image.ANTIALIAS)
#         im = picam.takePhotoWithDetails(640,480, 100) 
        if i == 0:
            out = im
        else:
#             out = out + im
#             out = ImageChops.lighter(out, im)
#             im = ImageChops.add(out, im)
#             im = ImageChops.add(im, im, 0.5)
            out = Image.blend(out,im,1/float(i+1))
#             out = Image.blend(out,im,0.5)
#             out = ImageChops.add(out,im,1)
        print np.max(out),    
        
    out.save(filename)
    return out

def timelapse(delta=1, n=60*24):
    for i in range(n):
        filename = datetime.now().strftime('data/snap_%Y.%m.%d_%H.%M.%S.jpg')
        try:
            x = stack(filename,10)
            time.sleep(60)
        except KeyboardInterrupt as e:
            print 'Stopped by user'
            break
    return x

# x = stack()
# x = timelapse()


Frame:  0 255 1 255 2 255 3 255 4 255 5 255 6 255 7 255 8 255 9 255

In [5]:
figure(figsize=(6,6))
x = stack()
imshow(x, vmin=0, vmax=np.max(x)*0.5);


Frame:  0 255 1 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x2002260> 2 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x20845A8> 3 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x2002260> 4 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x2084508> 5 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x2002260> 6 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x2084378> 7 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x2002260> 8 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x20844B8> 9 <PIL.Image.Image image mode=RGB size=2592x1944 at 0x2002260>

In [ ]:
fig = figure(figsize=(16,6))
for i,im in enumerate(x.split(),1):
    subplot(1,3,i)
#     figure(figsize=(4,4))
    im = imshow(im, vmin=0, vmax=np.max(x)*0.5)
    if i == 3:
        cax = pylab.axes([0.05,0.1,0.1,0.015])
        cb = pylab.colorbar(im, cax=cax, orientation='horizontal')
        cb.set_ticks([0, np.max(x)*0.25, np.max(x)*0.5])

In [56]:
# ((((a+b)/2.0+c)/2.0+d)/2.0+e)/2.0
# (((a/2+b/2+c)/2+d)/2+e)/2
# ((a/4+b/4+c/2+d)/2+e)/2
# (a/8+b/8+c/4+d/2+e)/2
# a/16+b/16+c/8+d/4+e/2

#((((a+b)/x1+c)/x2+d)/x3+e)/x4
#a/x1*x2*x3*x4 + b/x1*x2*x3*x4 + c/x2*x3*x4 + d/x3*x4  + e/x4

for i in range(10):
    print i, 1.0/(i+1)


0 1.0
1 0.5
2 0.333333333333
3 0.25
4 0.2
5 0.166666666667
6 0.142857142857
7 0.125
8 0.111111111111
9 0.1

In [ ]: