首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中有没有一种简单的方法可以将纹理映射到不同的"UV“系统?

在python中有没有一种简单的方法可以将纹理映射到不同的"UV“系统?
EN

Stack Overflow用户
提问于 2020-05-29 12:00:02
回答 1查看 264关注 0票数 1

我真的不知道"UV's“是不是合适的词,因为我来自Unity的世界,正在尝试用python写一些东西。我想要做的是拍摄一个人的照片(从网络摄像头)采取他们的地标/关键特征的位置,并改变第二张图像(不同的人),使他们的关键特征在相同的地方,同时变形/扭曲他们的皮肤部分,在面部内,以适应第一个输入图像(网络摄像头)的地标的位置。这样做之后,我需要把脸放回非网络摄像头输入。(我很抱歉,这让我听起来像一个连环杀手,伸展和削脸)我知道这可能没有任何意义,但我希望它看起来像this

我已经用DLIBOpenCV完成了面部地标和切割,但我需要找到一种方法来获得这些“切割”的面部块,并“动态”拉伸它们。我所说的动态的意思是,你不能仅仅通过在1到2个轴上线性地重新调整它的大小来戴上一个遮罩。你可以选择掩模的一个点并改变它,我想这样做,但我的掩模是我的切割块,点是该块中需要更改的一部分,以便块符合生成的地标的位置。我知道这是一个很难思考的话题,如果你们需要任何澄清,尽管问。我的代码:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-29 14:47:04

如果你需要使用2组关键点像橡皮片一样变形源图像,你需要使用thin plate spline (TPS),或者更好的,像here这样的分段仿射变换。最后一种方法更类似于纹理光栅化方法(三角形到三角形纹理变换)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62078489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档