import os import sys from shutil import move, copyfile from PIL import Image, ImageOps from shutil import copyfile, rmtree import numpy as np import cv2 from_dir = "IMG_1734/" to_dir = "IMG_1738/" render_dir = "flowwarp_transfer_cross/" if os.path.exists(render_dir): rmtree(render_dir) os.makedirs(render_dir) os.makedirs(render_dir + 'out_fwd_from/') os.makedirs(render_dir + 'out_rvr_from/') os.makedirs(render_dir + 'out_fwd_from_rec/') os.makedirs(render_dir + 'out_rvr_from_rec/') os.makedirs(render_dir + 'out_fwd_to/') os.makedirs(render_dir + 'out_rvr_to/') os.makedirs(render_dir + 'out_fwd_to_rec/') os.makedirs(render_dir + 'out_rvr_to_rec/') def warp_flow(img, flow): h, w = flow.shape[:2] flow = -flow flow[:,:,0] += np.arange(w) flow[:,:,1] += np.arange(h)[:,np.newaxis] res = cv2.remap(img, flow, None, cv2.INTER_LINEAR) return res def load(path): pil_image = Image.open(path).convert('RGB') im = np.array(pil_image) im = im[:, :, ::-1].copy() gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) return im, gray def get_files(d): return sorted([i.name for i in os.scandir(d) if os.path.isfile(d + i.name) and not i.name.startswith('.') and i.name.endswith('png')]) hsv = [] prev = None prev_bgr = None gray = None prev_gray = None prev_from = None prev_fwd_from = None prev_rvr_from = None prev_from_gray = None prev_to = None prev_fwd_to = None prev_rvr_to = None prev_to_gray = None from_files = get_files(from_dir) to_files = get_files(to_dir) for i,from_fn in enumerate(from_files): print(from_fn) to_fn = to_files[i] # load image and convert to grayscale from_im, from_gray = load(from_dir + from_fn) to_im, to_gray = load(to_dir + to_fn) # store first frame if prev_from_gray is None: prev_fwd_from = from_im prev_rvr_from = from_im prev_from_gray = from_gray prev_fwd_to = to_im prev_rvr_to = to_im prev_to_gray = to_gray #hsv = np.zeros((256,512,3)) #hsv[...,1] = 255 continue # compute optical flow from_fwd_flow = cv2.calcOpticalFlowFarneback(prev_from_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) #from_rvr_flow = cv2.calcOpticalFlowFarneback(from_gray, prev_from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) #to_fwd_flow = cv2.calcOpticalFlowFarneback(prev_to_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) #to_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, prev_to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) #cross_fwd_flow = cv2.calcOpticalFlowFarneback(from_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) #cross_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0) #mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1]) #hsv[...,0] = ang * 180 / np.pi / 2 #hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2) #bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR) #if prev_bgr is None: # prev_bgr = np.copy(bgr) # continue #if (i % 10) == 3: # wd = "test/" #elif (i % 10) == 6: # wd = "val/" #else: # wd = "train/" fwd_flow = from_fwd_flow #rvr_flow = from_rvr_flow out_fwd_from = warp_flow(from_im, fwd_flow) out_fwd_from_rec = warp_flow(prev_fwd_from, fwd_flow) out_fwd_to = warp_flow(to_im, fwd_flow) out_fwd_to_rec = warp_flow(prev_fwd_to, fwd_flow) #out_rvr_from = warp_flow(from_im, rvr_flow) #out_rvr_from_rec = warp_flow(prev_rvr_from, rvr_flow) #out_rvr_to = warp_flow(to_im, rvr_flow) #out_rvr_to_rec = warp_flow(prev_rvr_to, rvr_flow) ren = "frame_{:05d}.png".format(i) #cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr) #cv2.imwrite(render_dir + "B/" + wd + ren, bgr) cv2.imwrite(render_dir + "out_fwd_from/" + ren, out_fwd_from) cv2.imwrite(render_dir + "out_fwd_from_rec/" + ren, out_fwd_from_rec) cv2.imwrite(render_dir + "out_fwd_to/" + ren, out_fwd_to) cv2.imwrite(render_dir + "out_fwd_to_rec/" + ren, out_fwd_to_rec) #cv2.imwrite(render_dir + "out_rvr_from/" + ren, out_rvr_from) #cv2.imwrite(render_dir + "out_rvr_from_rec/" + ren, out_rvr_from_rec) #cv2.imwrite(render_dir + "out_rvr_to/" + ren, out_rvr_to) #cv2.imwrite(render_dir + "out_rvr_to_rec/" + ren, out_rvr_to_rec) #cv2.imwrite(render_dir + "next/" + ren, out_next) # copyfile(work_dir + fn, render_dir + "B/" + wd + ren) prev_from_gray = from_gray prev_to_gray = to_gray if i > 3: prev_fwd_from = out_fwd_from_rec prev_fwd_to = out_fwd_to_rec #prev_rvr_from = out_rvr_from_rec #prev_rvr_to = out_rvr_to_rec #prev_bgr = np.copy(bgr)