导读

本文将介绍如何使用OpenCV和Dlib实现人脸变形(人脸->人脸和人脸->动物脸)。(公众号:OpenCV与AI深度学习)

背景介绍

我们常常在影视作品中看到一些类似的特效,比如一张人脸慢慢变成另一张人脸或者动物的脸,其中颇具代表性的就是《西游记》了,本文将使用OpenCV和Dlib来实现类似功能,效果如下:

OpenCV与AI深度学习

,赞19

【1】人脸->人脸变化效果

【2】人脸->动物脸变化效果

实现步骤

【1】人脸面部特征点检测和动物脸面部特征点获取。人脸面部特征点基于Dlib检测获取,动物脸面部特征点手动标记得到(大家也可以自己训练网络获得)

【2】Delaunay三角剖分。

【3】扭曲图像和 alpha 混合。

我们现在可以智能地融合这两个图像。如前所述,混合量将由一个参数控制α. 使用以下步骤创建变形。

  1. 在变形图像中查找特征点的位置:在变形图像中M,我们可以找到所有 80 个点的位置(Xm,Ym)使用等式(1)。

  2. 计算仿射变换:所以我们在图像 1 中有一组 80 个点,在图像 2 中有另一组 80 个点,在变形图像中有第三组 80 个点。我们也知道在这些点上定义的三角剖分。选取图像 1 中的一个三角形和变形图像中的相应三角形,并计算将图像 1 中三角形的三个角映射到变形图像中相应三角形的三个角的仿射变换。在 OpenCV 中,这可以使用getAffineTransform来完成。计算每对 149 个三角形的仿射变换。最后,重复图像2和变形图像的过程。

  3. 变形三角形:对于图像 1 中的每个三角形,使用上一步计算的仿射变换将三角形内的所有像素转换为变形图像。对图像 1 中的所有三角形重复此操作,以获得图像 1 的变形版本。类似地,获得图像 2 的变形版本。在 OpenCV 中,这是通过使用函数warpAffine来实现的。然而,warpAffine 接收图像而不是三角形。诀窍是计算三角形的边界框,使用 warpAffine 扭曲边界框内的所有像素,然后屏蔽三角形外的像素。三角形蒙版是使用fillConvexPoly创建的。确保在使用 warpAffine 时使用 blendMode BORDER_REFLECT_101。它比克林顿国务卿隐藏她的电子邮件更好地隐藏接缝。

  4. Alpha 混合扭曲图像:在上一步中,我们获得了图像 1 和图像 2 的扭曲版本。这两个图像可以使用等式 ( 2 ) 进行 Alpha 混合,这是最终的变形图像。在我提供的代码中,扭曲三角形和 alpha 混合它们被合并在一个步骤中。

【4】面部变形结果。

视频动态效果:

参考链接与源码下载:

https://learnopencv.com/face-morph-using-opencv-cpp-python/#id1540306373

https://github.com/emreslyn/facial_landmark_and_image_morphing

OpenCV变脸大法--‘让妖怪现原形‘(附源码)相关推荐

  1. PyQt5 + Python3.7 + OpenCV人脸识别身份认证系统(附源码)

    基于PyQt5 + Python3.7 + OpenCV实现的人脸识别身份认证系统,附源码. 技术选型 PyQt5 + Python3.7 + OpenCV 功能概述 实现人员注册,信息修改,人脸识别 ...

  2. 【Android App】利用自带的人脸检测器和OpenCV检测人脸讲解及实战(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~~ 一.利用人脸检测器识别人脸 对于简单的人脸识别操作,Android已经提供了专门的识别工具,名叫人脸检测器FaceDetector,部分常用方法如下 F ...

  3. 整活--我是如何用OpenCV做了数字华容道游戏(附源码)

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为3829字,预计阅读9分钟 前言 数字华容道,记得以前<最强大脑>上一个初赛题目,正好最近家里买了个数字华容道的玩具 ...

  4. OpenCV+TensorFlow图片手写数字识别(附源码)

    初次接触TensorFlow,而手写数字训练识别是其最基本的入门教程,网上关于训练的教程很多,但是模型的测试大多都是官方提供的一些素材,能不能自己随便写一串数字让机器识别出来呢?纸上得来终觉浅,带着这 ...

  5. OpenCV实现基于形状的模板匹配(附源码)

    效果预览 OpenCV实现基于形状的模板匹配(多角度+不同亮度) 实例演示一: 实例演示二: 实例演示三: 实例演示四: 实例演示五: 实例演示六ÿ

  6. Halcon转OpenCV实例--去除纸张中的颜色笔迹/墨迹(附源码)

    导读 本文主要介绍一个去除纸张中颜色笔迹/墨迹的实例,并将Halcon实现转为OpenCV. 实例来源 实例来源于51Halcon论坛的讨论贴: https://www.51halcon.com/fo ...

  7. OpenCvSharp (C# OpenCV) DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别、骰子识别、菜品识别)(附源码)

    本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别.骰子识别.菜品识别)! 前言: 下 ...

  8. opencv判断 线夹角_python opencv实现直线检测并测出倾斜角度(附源码+注释)

    由于学习需要,我想要检测出图片中的直线,并且得到这些直线的角度.于是我在网上搜了好多直线检测的代码,但是没有搜到附有计算直线倾斜角度的代码,所以我花了一点时间,自己写了一份直线检测并测出倾斜角度的代码 ...

  9. 使用OpenCV处理图片的亮度、对比度、曝光、高光、阴影、饱和度、色温,色相(附源码)

    屏幕录制2023-05-22 22.09.32 集成opencv的方式请参照上一个帖子 OpenCV在iOS端的集成及Mat和UIImage互相转化(附源码) 废话不多说直接上代码,伸手党福利: 代码 ...

  10. 熬夜整理出了70个清华大佬都在用的Python经典练手项目【附源码】

    我们都知道,不管学习那门语言最终都要做出实际的东西来,而对于编程而言,这个实际的东西当然就是项目啦,不用我多说大家都知道学编程语言做项目的重要性. 于是,小编熬了几个通宵,终于整理出了70个清华大佬都 ...

最新文章

  1. Tomcat手动配置简述【查询留存】
  2. 容我喝一杯 java_花一杯茶的时间,学会Java反射(实用篇)
  3. 接口转发和重定向区别(三)
  4. 往ABAP gateway system上和Cloud Foundry上部署HTML5应用
  5. gitlab 构建tag_GitLab常用命令 分支 Tag 配置 操作
  6. MySQL进阶篇(03):合理的使用索引结构和查询
  7. html5表格树,利用ztree实现树形表格
  8. mybatis 原理_深入理解MyBatis原理 MyBatis数据源与连接池
  9. android真实项目教程(六)——落叶醉赤壁_by_CJJ
  10. Google C++ style guide——命名约定
  11. 电脑配置知识_电脑小知识:装机不求人!10 分钟电脑配置挑选速成攻略|硬盘|电脑|cpu|装机|固态硬盘|机械硬盘...
  12. 新浪微博数据采集以及分析方法(干货)
  13. 软考学习:吐血整理——自学软考的终极干货
  14. 显卡刷bios变砖怎么办--关于矿卡,一些惊呆我的骚操作
  15. python免费课程全套-为了学习Python,我汇总了这10个免费的视频课程!
  16. 神码ai人工智能写作机器人_机器学习与医学:人工智能在医疗保健中的陷阱
  17. arduino ps2摇杆程序_Arduino技巧之PS2摇杆实验
  18. android群英传 自定义滑动view,《Android群英传》读书笔记
  19. ASP.NET格式转换
  20. 家庭版操作系统打不开任务管理器解决办法

热门文章

  1. 在nuxt中使用swiper轮播
  2. 叶俊在深圳天长地久集团培训会上谈到“唤醒沟通力与工匠精神”
  3. Python 利用内置函数把二进制小数转换为十进制
  4. 云计算趋势:从SAS和RAID看服务器与存储的融合
  5. 油溶性CdSe/ZnS量子点,以CdSe为核心,ZnS为壳层,表面由疏水配体包裹的核/壳型荧光纳米材料
  6. ssh-keygen -t rsa详解
  7. 【侯捷】C++面向对象高级编程(下)
  8. 关于下载文件以及在swagger-ui中遇到的坑
  9. 赵丽颖冯绍峰官宣 | 微博服务器瘫痪!运维:该拿什么拯救我?
  10. html缩放动画效果,CSS3鼠标hover背景图片缩放动画效果