Я пытаюсь сделать приложение по обмену волосами в python.Я успешно вычистил волосы.Однако это не дало удовлетворенного результата.Но в заключительной части мне нужно взять изображение волос с образца головы и вставить его в образец изображения модели.Для этого я использую бесшовное клонирование.Вот мой код для этого и окончательное изображение:
import cv2
import numpy as np
# Read images : src image will be cloned into dst
im = cv2.imread("source.jpg")
obj = cv2.imread("hair.jpg")
# Create an all white mask
mask = 255 * np.ones(obj.shape, obj.dtype)
# The location of the center of the src in the dst
width, height, channels = im.shape
center = (250, 115)
# Seamlessly clone src into dst and put the results in output
mixed_clone = cv2.seamlessClone(obj, im, mask, center, cv2.MIXED_CLONE)
# Write results
cv2.imwrite("normal-clone.jpg", mixed_clone)
cv2.waitKey(0)
cv2.destroyAllWindows()
И сверху я получаю следующий результат:
Я знаю, что это плохо выглядит, но главная проблема здесь в том, что я использую аффинное преобразование для масштабирования и вращения, а затем бесшовное клонирование с использованием следующего кода:
import cv2
import numpy as np
# Read images : src image will be cloned into dst
im = cv2.imread("source.jpg")
obj = cv2.imread("hair.jpg")
#Wrap Affine transformation
rows,cols,ch = obj.shape
pts1 = np.float32([[160,199],[250,54],[339,200]])
pts2 = np.float32([[151,196],[250,33],[347,196]])
M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(obj,M,(cols,rows))
# Create an all white mask
mask = 255 * np.ones(dst.shape, dst.dtype)
# The location of the center of the src in the dst
width, height, channels = im.shape
center = (250, 115)
# Seamlessly clone src into dst and put the results in output
mixed_clone = cv2.seamlessClone(dst, im, mask, center, cv2.MIXED_CLONE)
# Write results
cv2.imshow("normal-clone", mixed_clone)
cv2.waitKey(0)
cv2.destroyAllWindows()
И я получаю следующий результат:
У меня есть другой код, написанный для генерации этих координатных точек.Я объединю их позже, так что мне не нужно вводить эти координаты вручную.Но сейчас я хочу знать, почему аффинная трансформация влияет на бесшовное клонирование.Что я делаю не так?
Или, любое решение по обмену волосами будет оценено.