def morph_img(src_img, src_points, dst_img, dst_points, alpha=0.5): morph_points = [] src_img = src_img.astype(np.float32) dst_img = dst_img.astype(np.float32) res_img = np.zeros(src_img.shape, src_img.dtype) # for i in src_points: # print(i) # 这一步的目的是调整脸型,将原图关键点和目标图关键点之间取中间点,根据alpha值来取 for i in range(0, len(src_points)): x = (1 - alpha) * src_points[i][0] + alpha * dst_points[i][0] y = (1 - alpha) * src_points[i][1] + alpha * dst_points[i][1] morph_points.append((x, y)) dt = core.measure_triangle(src_img, morph_points, src_points, dst_points) for i in range(0, len(dt)): t1 = [] t2 = [] t = [] for j in range(0, 3): t1.append(src_points[dt[i][j]]) t2.append(dst_points[dt[i][j]]) t.append(morph_points[dt[i][j]]) if (checkLine(t) or checkLine(t1) or checkLine(t2)): continue core.morph_triangle(src_img, dst_img, res_img, t1, t2, t, alpha, i) return res_img
def morph_img(src_img, src_points, dst_img, dst_points, alpha=0.5): morph_points = [] src_img = src_img.astype(np.float32) dst_img = dst_img.astype(np.float32) res_img = np.zeros(src_img.shape, src_img.dtype) for i in range(0, len(src_points)): x = (1 - alpha) * src_points[i][0] + alpha * dst_points[i][0] y = (1 - alpha) * src_points[i][1] + alpha * dst_points[i][1] morph_points.append((x, y)) dt = core.measure_triangle(src_img, morph_points) for i in range(0, len(dt)): t1 = [] t2 = [] t = [] for j in range(0, 3): t1.append(src_points[dt[i][j]]) t2.append(dst_points[dt[i][j]]) t.append(morph_points[dt[i][j]]) core.morph_triangle(src_img, dst_img, res_img, t1, t2, t, alpha) return res_img
def morph_img(src_img, src_points, dst_img, dst_points, alpha=0.5,show_bg=None): # test time start = time.time() src_img = src_img.astype(np.float32) dst_img = dst_img.astype(np.float32) morph_points = [] if show_bg: res_img = src_img.copy() else: res_img = np.zeros(src_img.shape, src_img.dtype) for i in range(0, len(src_points)): x = (1 - alpha) * src_points[i][0] + alpha * dst_points[i][0] y = (1 - alpha) * src_points[i][1] + alpha * dst_points[i][1] morph_points.append((x, y)) # dt = core.measure_triangle(src_img, morph_points) dt = core.measure_triangle(src_img, src_points) for i in range(0, len(dt)): t1 = [] t2 = [] t = [] for j in range(0, 3): t1.append(src_points[dt[i][j]]) t2.append(dst_points[dt[i][j]]) t.append(morph_points[dt[i][j]]) core.morph_triangle(src_img, dst_img, res_img, t1, t2, t, alpha) stop = time.time() print("morph_img用时"+str(stop-start)+"秒") return res_img