Skip to content

Instantly share code, notes, and snippets.

@alexlib
Last active May 16, 2021 14:04
Show Gist options
  • Save alexlib/ef7df7bfdb3dba1698f4 to your computer and use it in GitHub Desktop.
Save alexlib/ef7df7bfdb3dba1698f4 to your computer and use it in GitHub Desktop.
Python code using PIL to split the image into 4 quarters. useful for the four-view image splitter 3D-PTV project on http://www.openptv.net
from PIL import Image
import os
import glob
import numpy as np
def crop(im, height, width):
# im = Image.open(infile)
imgwidth, imgheight = im.size
rows = np.int(imgheight/height)
cols = np.int(imgwidth/width)
for i in range(rows):
for j in range(cols):
# print (i,j)
box = (j*width, i*height, (j+1)*width, (i+1)*height)
yield im.crop(box)
if __name__ == '__main__':
# change the path and the base name of the image files
imgdir = '.'
basename = 'Cam-*.tif'
filelist = glob.glob(os.path.join(imgdir, basename))
for filenum, infile in enumerate(filelist):
# infile='/Users/alex/Documents/PTV/test_splitter/cal/Camera 1-1-9.tif'
print(f'file no = {filenum}') # keep the numbers for the future
print(f'name is {infile}')
im = Image.open(infile)
imgwidth, imgheight = im.size
print(('Image size is: %d x %d ' % (imgwidth, imgheight)))
height = np.int(imgheight/2)
width = np.int(imgwidth/2)
start_num = 0
for k, piece in enumerate(crop(im, height, width), start_num):
# print k
# print piece
img = Image.new('L', (width, height), 255)
# print img
img.paste(piece)
path = os.path.join("cam%d_1%05d.tif" % (int(k+1),filenum))
img.save(path)
os.rename(path, os.path.join("cam%d.1%05d" % (int(k+1), filenum)))
@alexlib
Copy link
Author

alexlib commented May 13, 2020

Thanks. in the new version I think I fixed it with

        height = np.int(imgheight/2)
        width = np.int(imgwidth/2)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment