Несколько советов по устранению ошибок для плавного клонирования и аффинного преобразования - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь сделать приложение по обмену волосами в 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()

И сверху я получаю следующий результат: Source Image Hair Image Seamless cloned

Я знаю, что это плохо выглядит, но главная проблема здесь в том, что я использую аффинное преобразование для масштабирования и вращения, а затем бесшовное клонирование с использованием следующего кода:

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()

И я получаю следующий результат:

Final Image

У меня есть другой код, написанный для генерации этих координатных точек.Я объединю их позже, так что мне не нужно вводить эти координаты вручную.Но сейчас я хочу знать, почему аффинная трансформация влияет на бесшовное клонирование.Что я делаю не так?

Или, любое решение по обмену волосами будет оценено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...