from __future__ import division import math import json import random import pprint import scipy.misc import numpy as np from time import gmtime, strftime import cv2 def get_image(image_path, image_size, is_crop=True, resize_w=64, is_grayscale = False): return transform(imread(image_path, is_grayscale), image_size, is_crop, resize_w) def save_images(images, size, image_path): return imsave(inverse_transform(images), size, image_path) def save_images2(images, size, image_path): return imsave(images, size, image_path) def imread(path, is_grayscale = False): if (is_grayscale): return scipy.misc.imread(path, flatten = True).astype(np.float) else: return scipy.misc.imread(path).astype(np.float) def save_source(images, size, path): img = merge(images, size) mean = np.array([104., 117., 124.]) img = np.uint8(img + mean) cv2.imwrite(path, img[:, :, [2, 1, 0]]) def merge_images(images, size): return inverse_transform(images) def merge(images, size): h, w = images.shape[1], images.shape[2] img = np.zeros((h * size[0], w * size[1], 3)) for idx, image in enumerate(images): i = idx % size[1] j = idx // size[1] img[j*h:j*h+h, i*w:i*w+w, :] = image return img def imsave(images, size, path): return scipy.misc.imsave(path, merge(images, size)) def center_crop(x, crop_h, crop_w=None, resize_w=64): if crop_w is None: crop_w = crop_h h, w = x.shape[:2] j = int(round((h - crop_h)/2.)) i = int(round((w - crop_w)/2.)) return scipy.misc.imresize(x[j:j+crop_h, i:i+crop_w], [resize_w, resize_w]) def transform(image, npx=64, is_crop=True, resize_w=64): # npx : # of pixels width/height of image if is_crop: cropped_image = center_crop(image, npx, resize_w=resize_w) else: cropped_image = image return np.array(cropped_image)/127.5 - 1. def inverse_transform(images): return (images+1.)/2.