reverse2original.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import cv2
  2. import numpy as np
  3. # import time
  4. from util.add_watermark import watermark_image
  5. def reverse2wholeimage(swaped_imgs, mats, crop_size, oriimg, logoclass, save_path = '', no_simswaplogo = False):
  6. target_image_list = []
  7. img_mask_list = []
  8. for swaped_img, mat in zip(swaped_imgs, mats):
  9. swaped_img = swaped_img.cpu().detach().numpy().transpose((1, 2, 0))
  10. img_white = np.full((crop_size,crop_size), 255, dtype=float)
  11. # inverse the Affine transformation matrix
  12. mat_rev = np.zeros([2,3])
  13. div1 = mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0]
  14. mat_rev[0][0] = mat[1][1]/div1
  15. mat_rev[0][1] = -mat[0][1]/div1
  16. mat_rev[0][2] = -(mat[0][2]*mat[1][1]-mat[0][1]*mat[1][2])/div1
  17. div2 = mat[0][1]*mat[1][0]-mat[0][0]*mat[1][1]
  18. mat_rev[1][0] = mat[1][0]/div2
  19. mat_rev[1][1] = -mat[0][0]/div2
  20. mat_rev[1][2] = -(mat[0][2]*mat[1][0]-mat[0][0]*mat[1][2])/div2
  21. orisize = (oriimg.shape[1], oriimg.shape[0])
  22. target_image = cv2.warpAffine(swaped_img, mat_rev, orisize)
  23. img_white = cv2.warpAffine(img_white, mat_rev, orisize)
  24. img_white[img_white>20] =255
  25. img_mask = img_white
  26. kernel = np.ones((10,10),np.uint8)
  27. img_mask = cv2.erode(img_mask,kernel,iterations = 1)
  28. img_mask /= 255
  29. img_mask = np.reshape(img_mask, [img_mask.shape[0],img_mask.shape[1],1])
  30. target_image = np.array(target_image, dtype=np.float)[..., ::-1] * 255
  31. img_mask_list.append(img_mask)
  32. target_image_list.append(target_image)
  33. # target_image /= 255
  34. # target_image = 0
  35. img = np.array(oriimg, dtype=np.float)
  36. for img_mask, target_image in zip(img_mask_list, target_image_list):
  37. img = img_mask * target_image + (1-img_mask) * img
  38. final_img = img.astype(np.uint8)
  39. if not no_simswaplogo:
  40. final_img = logoclass.apply_frames(final_img)
  41. cv2.imwrite(save_path, final_img)
  42. # cv2.imwrite('E:\\lny\\SimSwap-main\\output\\img_div.jpg', img * 255)
  43. # cv2.imwrite('E:\\lny\\SimSwap-main\\output\\ori_img.jpg', oriimg)