visrecall/WebInterface/Front-end/generate-experiment-files/create_padded_image_dir.py

89 lines
2.9 KiB
Python

import os
import glob
from PIL import Image
from collections import Counter
import matplotlib.pyplot as plt
# resize all images to these max dimensions (to be consistent across experiments with different image sizes)
MAX_H = 1340 #1920 1920 resized to 1000, max height can be 700 so 700x(1920/1000)
MAX_W = 1920
to_resize = True
todebug = False
def get_max_dims(allfiles):
widths = []
heights = []
for file in allfiles:
im = Image.open(file)
width, height = im.size
widths.append(width)
heights.append(height)
if todebug:
print("Image widths:",Counter(widths).keys())
print("Image heights:",Counter(heights).keys())
maxwidth = max(list(Counter(widths).keys()))
maxheight = max(list(Counter(heights).keys()))
if to_resize:
ratio = min(MAX_W/maxwidth, MAX_H/maxheight)
maxwidth = int(maxwidth*ratio)
maxheight = int(maxheight*ratio)
return maxwidth,maxheight
def save_padded_images(real_image_dir,allfiles,toplot=False,maxwidth=None,maxheight=None):
if maxwidth==None or maxheight==None:
maxwidth,maxheight = get_max_dims(allfiles)
print('Padding %d image files to dimensions: [%d,%d]...'%(len(allfiles),maxwidth,maxheight))
for file in allfiles:
#print(file)
im = Image.open(file)
if to_resize:
#resize image to fixed dimensions
width, height = im.size
ratio = min(maxwidth/width, maxheight/height)
newwidth = int(width*ratio)
newheight = int(height*ratio)
if todebug: print('resizing %dx%d to %dx%d (ratio=%2.2f)'%(width,height,newwidth,newheight,ratio))
im = im.resize((newwidth,newheight), Image.ANTIALIAS)
width, height = im.size
padded_im = Image.new('RGB',
(maxwidth, maxheight),
(126, 126, 126))
offset = ((maxwidth - width) // 2, (maxheight - height) // 2)
padded_im.paste(im, offset)
padded_im.save(os.path.join(real_image_dir,os.path.basename(file)))
if toplot:
plt.figure(figsize=(10,10))
plt.imshow(padded_im)
plt.axis('off');
plt.show();
print('Done!')
return maxwidth,maxheight
if __name__ == "__main__":
sourcedir = '../../importance_dataset/predimportance/analysis/CVs_all' # take images from here
rootdir = './task_data'
real_image_dir = os.path.join(rootdir,'real_images')
if not os.path.exists(real_image_dir):
print('Creating directory %s'%(real_image_dir))
os.makedirs(real_image_dir)
allfiles = glob.glob(os.path.join(sourcedir,'*.png'))
save_padded_images(real_image_dir,allfiles,toplot=False)