import cv2 import numpy as np import os def combine_images (bg, fg, mask) : fk = cv2.bitwise_or(fg, fg, mask=mask) mask = cv2.bitwise_not(mask) bk = cv2.bitwise_or(bg, bg, mask=mask) return cv2.bitwise_or(fk, bk) username = os.getlogin() #outer template outer = cv2.imread(f"/home/{username}/Desktop/running/shot1-scans/image-2-normal.png") outer = cv2.cvtColor(outer, cv2.COLOR_BGR2BGRA) #inner image inner = cv2.imread(f"/home/{username}/Desktop/frame.jpg") inner = cv2.cvtColor(inner, cv2.COLOR_BGR2BGRA) rows, cols, ch = outer.shape ir, ic, ich = inner.shape print(f'{cols}x{rows}') print(f'{ic}x{ir}') # destination ponts on outer image pts1 = np.float32([[1445, 11429], [1445, 6832], [5009, 11429]]) # corresponding points on inner image pts2 = np.float32([[0, 0], [ic, 0], [0, ir]]) # transform inner to points on outer M = cv2.getAffineTransform(pts2, pts1) # apply dst = cv2.warpAffine(inner, M, (cols, rows), flags = cv2.INTER_CUBIC, borderMode = cv2.BORDER_CONSTANT, borderValue = [0, 0, 0, 0] ) lower = np.array([0,0,0,0]) upper= np.array([0,0,0,0]) # Create a mask. Threshold the HSV image to get only yellow colors mask = cv2.inRange(dst, lower, upper) mask = cv2.bitwise_not(mask) final = combine_images(outer, dst, mask) final = cv2.cvtColor(final, cv2.COLOR_BGRA2BGR) cv2.imwrite("affine_poc3.png", final)