#!/usr/bin/env python import os import Image import numpy as np import glob import matplotlib.pyplot as plt noNewLine = '\x1b[1A\x1b[1M' def go(): """ Cut/combine time-lapse images in vertical slices. G. Brammer (gbrammer@gmail.com) - October 7, 2012 """ NBLOCK = 30 images = glob.glob('DSC*jpg')#[0:30]#[105:135] #### Count number of images and image size N = len(images) im0 = Image.open(images[0]) NX, NY = im0.size subx = NX/NBLOCK im_arr = np.asarray(im0)*1 ### First images is simply the first frame j=0 out = Image.fromarray(im_arr).resize((1920,1080)) out.save('first_%03d.jpg' %(j+1)) #### First group, adding images sequentially for j in range(1,NBLOCK): sub_images = images[:j+1] img = Image.open(sub_images[0]) im_arr = np.asarray(img)*1 x0 = NX-j*subx for i in range(j): print noNewLine+'Image %d of %d (%s)' %(i+1, j, sub_images[i]) img = Image.open(sub_images[i+1]) im_i = np.asarray(img)*1 im_arr[:,x0+i*subx:x0+(i+1)*subx,:] = im_i[:,x0+i*subx:x0+(i+1)*subx,:]*1 # out = Image.fromarray(im_arr).resize((1920,1080)) try: os.remove('combined_%03d.jpg' %(j+1)) except: pass # out.save('first_%03d.jpg' %(j+1)) #### Middle group, NBLOCK images at a time for j in range(1,N-NBLOCK): sub_images = images[j:j+NBLOCK] for i in range(NBLOCK): print noNewLine+'Image %d of %d (%s)' %(i+1, NBLOCK, sub_images[i]) img = Image.open(sub_images[i]) im_i = np.asarray(img)*1 im_arr[:,i*subx:(i+1)*subx,:] = im_i[:,i*subx:(i+1)*subx,:]*1 # out = Image.fromarray(im_arr).resize((1920,1080)) try: os.remove('combined_%03d.jpg' %(j+1)) except: pass # out.save('combined_%03d.jpg' %(j+1)) #### Last group for j in range(N-NBLOCK, N-1): sub_images = images[j:] img = Image.open(sub_images[-1]) im_arr = np.asarray(img)*1 x0 = 0 #NX-j*subx for i in range(len(sub_images)-1): print noNewLine+'Image %d of %d (%s)' %(i+1, len(sub_images)-1, sub_images[i]) img = Image.open(sub_images[i]) im_i = np.asarray(img)*1 im_arr[:,x0+i*subx:x0+(i+1)*subx,:] = im_i[:,x0+i*subx:x0+(i+1)*subx,:]*1 # out = Image.fromarray(im_arr).resize((1920,1080)) try: os.remove('combined_%03d.jpg' %(j+1)) except: pass # out.save('combined_%03d.jpg' %(j+1)) if __name__ == "__main__": go()