有没有一种简单的方法可以将纹理映射到 python 中的不同 "UV" 系统?
Is there a simple way to map a texture to a different "UV" system in python?
我真的不知道 "UV's" 是否是正确的词,因为我来自 Unity 世界并且正在尝试在 python 中写一些东西。我想要做的是拍摄一张人的照片(从网络摄像头),放置他们的 landmarks/key 特征并改变第二张图像(另一个人的)以在同一个地方制作他们的关键特征同时变形/扭曲面部内的皮肤部分以适应第一个输入图像(网络摄像头)的地标的位置。在我这样做之后,我需要把脸放回非网络摄像头输入。 (我很抱歉让我听起来像一个连环杀手,拉伸和切割面孔)我知道这可能没有任何意义,但我希望它看起来像 this.
我已经用 DLIB
和 OpenCV
完成了面部标志和切割,但我需要一种方法来找到一种方法来获取这些 "cut" 面部块并拉伸它们 "dynamically".我所说的动态的意思是,您不只是通过在 1 或 2 个轴上线性调整大小来放置遮罩。您可以 select 掩码的一个点并更改它,我想这样做,但我的掩码是我切割的块,该点是该块的一部分,需要更改该块以符合生成的地标。我知道这是一个很难思考的话题,如果你们需要任何澄清,尽管问。我的代码:
import cv2
import numpy as np
import dlib
cap = cv2.VideoCapture(0)
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
while True:
_, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(gray)
for face in faces:
x1 = face.left()
y1 = face.top()
x2 = face.right()
y2 = face.bottom()
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 3)
landmarks = predictor(gray, face)
for n in range(0, 68):
x = landmarks.part(n).x
y = landmarks.part(n).y
cv2.circle(frame, (x, y), 4, (255, 0, 0), -1)
cv2.imshow("Frame", frame)
key = cv2.waitKey(1)
if key == 27:
break
编辑:不,我不是连环杀手
如果您需要使用 2 组关键点将源图像变形为橡胶 sheet,则需要使用 thin plate spline (TPS), or, better, piecewice affine transformation like here。最后一种更类似于纹理光栅化方法(三角形到三角形纹理变换)。
我真的不知道 "UV's" 是否是正确的词,因为我来自 Unity 世界并且正在尝试在 python 中写一些东西。我想要做的是拍摄一张人的照片(从网络摄像头),放置他们的 landmarks/key 特征并改变第二张图像(另一个人的)以在同一个地方制作他们的关键特征同时变形/扭曲面部内的皮肤部分以适应第一个输入图像(网络摄像头)的地标的位置。在我这样做之后,我需要把脸放回非网络摄像头输入。 (我很抱歉让我听起来像一个连环杀手,拉伸和切割面孔)我知道这可能没有任何意义,但我希望它看起来像 this.
我已经用 DLIB
和 OpenCV
完成了面部标志和切割,但我需要一种方法来找到一种方法来获取这些 "cut" 面部块并拉伸它们 "dynamically".我所说的动态的意思是,您不只是通过在 1 或 2 个轴上线性调整大小来放置遮罩。您可以 select 掩码的一个点并更改它,我想这样做,但我的掩码是我切割的块,该点是该块的一部分,需要更改该块以符合生成的地标。我知道这是一个很难思考的话题,如果你们需要任何澄清,尽管问。我的代码:
import cv2
import numpy as np
import dlib
cap = cv2.VideoCapture(0)
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
while True:
_, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(gray)
for face in faces:
x1 = face.left()
y1 = face.top()
x2 = face.right()
y2 = face.bottom()
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 3)
landmarks = predictor(gray, face)
for n in range(0, 68):
x = landmarks.part(n).x
y = landmarks.part(n).y
cv2.circle(frame, (x, y), 4, (255, 0, 0), -1)
cv2.imshow("Frame", frame)
key = cv2.waitKey(1)
if key == 27:
break
编辑:不,我不是连环杀手
如果您需要使用 2 组关键点将源图像变形为橡胶 sheet,则需要使用 thin plate spline (TPS), or, better, piecewice affine transformation like here。最后一种更类似于纹理光栅化方法(三角形到三角形纹理变换)。