使用OpenCV+Dlib操作人脸-600学习网

600学习网终身会员188,所有资源无秘无压缩-购买会员

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

这是一个关于如何使用OpenCV和DLIB在图像上应用虚拟口红的快速教程。同样的原则也可以扩展到其他面部特征,例如某人的眼睛.鼻子.下巴。为了获得上图所示的结果,我们需要执行以下一系列步骤:检测面部标志使用由嘴部标志组成的凸多边形来创建面罩使用形态学操作来增强面罩并使其模糊以获得更好的混合效果隔离嘴唇和脸对嘴唇应用颜涩变换将嘴唇和脸放在一起首先,我们需要检测人脸的面部特征。库Dlib提供了一种方便的方法来实现这一点;但是,请记住,对象的脸需要面对相机。如果头部姿势不正确,测试结果将很差。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

在这个例子中,我们只对嘴唇的点感兴趣。下图显示了Dlib返回的面部地标索引。如你所见,我们对48到60点(嘴唇的外部”轮廓”)感兴趣。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

使用这些点,我们可以制作一个面具,让我们可以在不影响面部整体外观的情况下处理嘴唇的颜涩。但等一下。在我们开始使用这些颜涩之前,我们需要改进面罩。在本例中,使用4×4矩形核的形态闭合操作就足够了。请注意下面的图像,它填充了cv2生成的原始多边形右上角的一个间隙。右:用lips/Left:polygon在关闭操作后创建的凸多边形

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

对于自然效果,我们还需要一个模糊遮罩。模糊遮罩将产生更好的混合效果。我们将cv2.GaussianBlur应用于遮罩。最后,我们反转面罩(我们需要两个,一个用于嘴唇,另一个用于面部)。右:模糊遮罩/左:模糊反转遮罩

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

我们将通过将这些掩码从0–255(uint8)转换为0–1(float)范围,然后将其与图像相乘来应用这些掩码。右下角的图像是原始图像乘以反转掩模。左边的图像是原始图像上的颜涩变换乘以蒙版的结果。颜涩变换由cv2.applyColorMap(im,cv2.COLORMAP_INFERNO)给出。右:原始图像和反向模糊遮罩的位与运算/左:颜涩变换图像和模糊遮罩位与运算

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

现在,剩下的就是添加这两个图像。右:原始图像/左:结果图像

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

这是密码。

导入cv2

导入dlib

导入faceBlendCommon作为面

将numpy导入为np

#加载图像

im=cv2.imread(“cv2/女孩-无-化妆.jpg”)

#检测面部关键点

PREDICTOR_PATH=r”C:用户elipe.cunhDocuments envcv2week1-pytondatmodelshape_PREDICTOR_68_face_landmarks.dat”

faceDetector=dlib.get_front_face_detector()

landmarkDetector=dlib.shape_预测器(预测器_路径)

landmarks=face.getLandmarks(faceDetector.landmarkDetector,im)

#为你的嘴唇做个口罩

lipsPoints=地标[48:60]

掩码=np.零((im.shape[0],im.shape[1],3),dtype=np.float32)

cv2.fillConvexPoly(掩码,np.int32(lipsPoints),(1.0,1.0,1.0))

掩码=255*np.uint8(掩码)

#应用闭合操作以改善面罩

内核=cv2.getStructuringElement(cv2.MORPH_RECT,(40,40))

mask=cv2.morphologyEx(掩码,cv2.MORPH_CLOSE,内核,1)

#自然效果的模糊遮罩

掩码=cv2.高斯模糊(掩码,(15,15),cv2.边界_默认)

#计算反向掩码

inverseMask=cv2.位_不(掩码)

#将掩码转换为浮点以进行混合

mask=mask.astype(float)/255

inverseMask=inverseMask.astype(float)/255

#将颜涩贴图应用于嘴唇

嘴唇=cv2.applyColorMap(im,cv2.COLORMAP_INFERNO)

#将嘴唇和脸转换为0-1范围

lips=lips.astype(float)/255

ladyFace=im.astype(浮点数)/255

#用面膜调整嘴唇和面部

justLips=cv2.乘法(口罩,嘴唇)

justFace=cv2.乘法(inverseMask,ladyFace)

#添加面部和嘴唇

结果=justFace+justLips

#显示结果

cv2.imshow(“”,结果)

cv2.waitKey(0)

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » 使用OpenCV+Dlib操作人脸-600学习网