OpenCV-Python实现人脸磨皮算法


Posted in Python onJune 07, 2021

人脸磨皮是最基础的人脸美颜效果。主要分为祛斑,祛痘,淡化黑眼圈等步骤。通过前面的学习相信大家一眼都看得出来我们需要干什么才能识别人脸磨皮效果。

因为磨皮之后,脸部的杂质基本上就没有了,也可以说丢失了细节。那么肯定需要用到滤波函数。滤波的过程就是把图像的每一个像素值输入过滤器,得到平滑的图像。

而我们常用的滤波有均值滤波,高斯滤波以及双边滤波三种,到底选用那种滤波呢?

首先,均值滤波会因为是用周围像素的平均值代替原像素值,肯定会导致图像过于模糊,所以排除掉。其次,高斯滤波与均值滤波原理类似,只是高斯滤波器的模板系数会随着距离模板中心的增大而减小,虽然可以减弱图像的模糊程度,但是图像边缘信息会丢失。

那么,只剩一个滤波了,也就是双边滤波器。因为它同时综合了高通滤波器和a-截尾均值过滤器的叠加效果,即可以保证图像不是非常模糊,也可以保留图像边缘信息。

而人脸磨皮原理的步骤分为如下3个步骤:

  • 图像滤波
  • 图像融合
  • 图像锐化

因为,不管上面3种滤波如何,都会导致一定的模糊(只是相对来说谁更优而已),所以需要对图像进行融合与锐化的操作。这样,可以保留一些图像的细节,以增强图像的真实感。

其中,图像融合使用的函数就是cv2.addWeighted()图像加权函数。融合的是原图与双通滤波后的图像。

最后,图像锐化使用的PIL库进行操作,使用它的ImageEnhance.Sharpness()函数自动调节图像的锐度与对比度。

实现人脸磨皮效果

既然我们已经完全掌握了人脸磨皮的原理。下面,我们来直接实现人脸的磨皮效果,具体的代码如下所示:

# 人脸磨皮
def facial_dermabrasion_effect(fileName):
    img = cv2.imread(fileName)
    blur_img = cv2.bilateralFilter(img, 31, 75, 75)
    #图像融合
    result_img = cv2.addWeighted(img, 0.3, blur_img, 0.7, 0)
    cv2.imwrite("58_1.jpg", result_img)

    image = Image.open("58_1.jpg")
    # 锐度调节
    enh_img = ImageEnhance.Sharpness(image)
    image_sharped = enh_img.enhance(1.5)
    # 对比度调节
    con_img = ImageEnhance.Contrast(image_sharped)
    image_con = con_img.enhance(1.15)
    image_con.save("58_2.jpg")

    img1 = cv2.imread("58.jpg")
    img2 = cv2.imread("58_2.jpg")
    cv2.imshow("1", img1)
    cv2.imshow("2", img2)
    cv2.waitKey()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    facial_dermabrasion_effect("58.jpg")

运行之后,效果如下:

OpenCV-Python实现人脸磨皮算法

这段代码的参数都是可以调整的,并不是一层不变的,感兴趣的读者可以自己调节参数试试效果,当然人脸磨皮只是看起来皮肤光滑了。下面结合美白的效果,就可以实现相机的那种美颜。

到此这篇关于OpenCV-Python实现人脸磨皮算法的文章就介绍到这了,更多相关OpenCV 人脸磨皮内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
详解Python的迭代器、生成器以及相关的itertools包
Apr 02 Python
python实现给数组按片赋值的方法
Jul 28 Python
Python中的变量和作用域详解
Jul 13 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
使用python爬取微博数据打造一颗“心”
Jun 28 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
在python中求分布函数相关的包实例
Apr 15 Python
python的链表基础知识点
Sep 13 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 Python
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
Python字典和列表性能之间的比较
使用pycharm运行flask应用程序的详细教程
You might like
PHP读取PPT文件的方法
2015/12/10 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
Ionic快速安装教程
2016/06/03 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
简单介绍Python中的len()函数的使用
2015/04/07 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
Python的条件锁与事件共享详解
2019/09/12 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
物业电工岗位职责
2013/11/20 职场文书
警察思想汇报
2014/01/04 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python