import numpy as np import torch import torch.nn as nn import torch.nn.functional as F import cv2 import os import imageio def dilate(bin_img, ksize=5): # bin_img pad = (ksize-1)//2 bin_img = F.pad(bin_img, pad=[pad,pad,pad,pad], mode='reflect') out = F.max_pool2d(bin_img, kernel_size=ksize, stride=1, padding=0) return out def erode(bin_img, ksize=5): out = 1 - dilate(1-bin_img, ksize) return out def to8b(x): return (255*np.clip(x, 0, 1)).astype(np.uint8) def mse2psnr(x): return -10. * torch.log(x) / torch.log(torch.Tensor([10.])) def img2mse(x, y): return torch.mean((x - y) ** 2) def video2images(video_name, out_dir): cap = cv2.VideoCapture(video_name) frame_num = 0 while(True): _, frame = cap.read() if frame is None: break out_frame_name = os.path.join(out_dir, str(frame_num) + '.jpg') cv2.imwrite(out_frame_name, frame) frame_num += + 1 cap.release() def load_image_as_uint8_tensor(fname): """ img: (H, W, 3) floatTensor """ img = torch.as_tensor(imageio.imread(fname)) return img if __name__ =='__main__': video2images("test_data/May_val/AD-NeRF.mp4", "test_data/May_val/AD-NeRF") video2images("test_data/May_val/GeneFace.mp4", "test_data/May_val/GeneFace") video2images("test_data/May_val/GT.mp4", "test_data/May_val/GT")