在Python中是否有简单的方法将纹理映射到不同的“UV”系统?

我来自Unity世界,正在尝试用Python编写一些东西,所以我不知道“UV”是否是正确的术语。我想做的是拍摄一个人的照片(通过网络摄像头),获取他们的地标/关键特征的位置,然后调整另一张图片(不同的人)的关键特征,使其与第一个输入图像(网络摄像头)的地标位置一致,同时变形/扭曲脸部皮肤内的部分以适应第一个输入图像的地标位置。完成后,我需要将脸部放回非网络摄像头输入的图像上。(对不起,我的描述听起来像是连环杀手,在拉伸和切割脸部)我知道这可能听起来不太合理,但我希望它看起来像这个视频中的效果。

我已经使用DLIBOpenCV完成了面部地标检测和切割,但我需要一种方法来动态拉伸这些“切割”的面部块。我所说的动态是指不仅仅是线性地在1或2个轴上调整大小来戴上面具。你可以选择面具上的一个点并改变它,我想做到这一点,但我的面具是我的切割块,而点是需要改变的块的一部分,以便块符合生成的地标位置。我知道这是一个很难思考的话题,如果你们需要任何澄清,请随时问。我的代码如下:

import cv2import numpy as npimport dlibcap = 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

编辑:不,我不是连环杀手


回答:

如果你需要像橡皮片一样变形源图像,使用两组关键点,你需要使用薄板样条(TPS),或者更好的是使用像这里展示的分段仿射变换。后者更类似于纹理光栅化方法(三角形到三角形的纹理变换)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注