Spaces:
Sleeping
Sleeping
import cv2 | |
import numpy as np | |
def overlay_hairstyle(img, hairstyle_img, mask, x_offset=0, y_offset=0, scale=1.0): | |
# Resize the hairstyle | |
h, w = img.shape[:2] | |
hs = cv2.resize(hairstyle_img, (0, 0), fx=scale, fy=scale) | |
hh, hw = hs.shape[:2] | |
# Position | |
center_x, center_y = w // 2 + x_offset, h // 5 + y_offset | |
top_left_x = max(0, center_x - hw // 2) | |
top_left_y = max(0, center_y - hh // 2) | |
roi = img[top_left_y:top_left_y+hh, top_left_x:top_left_x+hw] | |
if roi.shape[:2] != hs.shape[:2]: | |
return img | |
if hs.shape[2] == 4: | |
alpha = hs[:, :, 3] / 255.0 | |
for c in range(3): | |
roi[:, :, c] = roi[:, :, c] * (1 - alpha) + hs[:, :, c] * alpha | |
else: | |
roi[:] = hs | |
img[top_left_y:top_left_y+hh, top_left_x:top_left_x+hw] = roi | |
return img |