人脸融合技术,用 Python – OpenCV 来帮你实现

提了好几天的人脸融合技术,今天终于被提上日程,该技术是基于之前介绍的技术基础上延伸得到的,如果之前没有了解过这两篇文章,建议提前看下,
实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!
利用 OpenCV-Python 进行人脸 Delaunay 三角剖分(人脸检测核心技术之一)

1,Image Morphing 介绍

图像融合简单来说,通过把图像设置为不同的透明度,把两张图像融合为一张图像(一般要求图像需要是等尺寸大小的),公式如下:
M ( x , y ) = ( 1 α ) I ( x , y ) + α J ( x , y ) α 为 设 置 的 透 明 度 参 数 I ( x , y ) 为 图 像 I 坐 标 为 ( x , y ) 的 像 素 值 ; J ( x , y ) 为 图 像 J 坐 标 为 ( x , y ) 的 像 素 值 ; M ( x , y ) 为 融 合 之 后 图 像 的 像 素 值 ; M(x,y) = (1-alpha)I(x,y)+alpha J(x,y) alpha 为设置的透明度参数 I(x,y) 为图像 I 坐标为 (x,y) 的像素值;J(x,y)为图像 J 坐标为 (x,y) 的像素值; M(x,y) 为融合之后图像的像素值; M(x,y)=(1/span>α)I(x,y)+αJ(x,y)αI(x,y)I(x,y);J(x,y)J(x,y);M(x,y)
2,Image Morphing 简单尝试

可以根据这个公式尝试实现一下融合技术,利用 OpenCV 的 cv2.addWeighted() 函数,代码如下:

这里 alpha 设置为 0.5, 最终结果如下图:

circle.jpg

4,Delaunay 三角剖分

这里三角剖分目的网格化图像脸部区域,方便寻找特征点,为后面使用仿射变换进行对齐操作:

Snipaste_2020-06-06_23-41-50.png

3,图片中对每一个三角剖分区域做放射变换,用到的函数:getAffineTransform() 得到仿射变换矩阵,warpAffine() 进行放射变换,最终得到两个变换图像,

4,对 3 中得到的两图像中像素值调整透明度参数,来进行图像融合

最终结果如下:

out_img.jpg

人脸融合技术,用 Python - OpenCV 来帮你实现

小总结

虽然本次面向对象是人脸,但相同技术原理也可以运用到其他物体上面,比如把苹果和橘子相融合、人脸区域更换等功能,如果有更好的 idea 的话,可能会得到意想不到的结果!

最后文章中完整源码和文件都已经打包到 Github 上去了,关注公众号: 小张Python,后台回复关键词 FaceMorph 即可获取.

文章知识点与官方知识档案匹配,可进一步学习相关知识OpenCV技能树首页概览10909 人正在系统学习中

人脸融合技术,用 Python - OpenCV 来帮你实现 微信公众号 人脸融合技术,用 Python - OpenCV 来帮你实现 分享Python爬虫、可视化分析、Django等内容

来源:程序员大飞1

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月13日
下一篇 2022年2月13日

相关推荐