OpenCV-Python实现人脸美白算法的实例


Posted in Python onJune 11, 2021

人脸美白原理

人脸美白原理说透了,就是一种图像的颜色空间处理,所以我们需要通过颜色空间进行设计。

不过,我们先来参考以下PS对于图像美白的处理步骤:

  • 首先,新建一个图层,将这个图层设置为白色
  • 接着,将白色图层与原本图像进行alpha通道的颜色混合,这样就可以使图像整体变白。

通过PS的操作,我们大致可以知道需要创建一个与原图同等大小维度的图像,然后全部赋值为白色,然后通过图像图像加权和将两个图像叠加即可。

不过,这里明显存在很多问题,在PS中,我们虽然创建了全白色的图层,但是我们可以剪裁或者使用画笔工具只让白色叠加倒人物身上。而程序中,我们这么做会导致整个图像偏白,效果非常不理想。

那么,我们就需要考虑一个新的思路来实现人脸美白效果。

根据论文“A Two-Stage Contrast Enhancement Algorithm for Digital Images”,采用映射表,使原图在色阶上有所增强,并在图像两端亮度相对减弱,中间增强,则会产生不错的美白效果,又能使图像白的更自然。

这里,我们提供一个美白映射表Color_list:

Color_list = [
	1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 31, 33, 35, 37, 39,
	41, 43, 44, 46, 48, 50, 52, 53, 55, 57, 59, 60, 62, 64, 66, 67, 69, 71, 73, 74,
	76, 78, 79, 81, 83, 84, 86, 87, 89, 91, 92, 94, 95, 97, 99, 100, 102, 103, 105,
	106, 108, 109, 111, 112, 114, 115, 117, 118, 120, 121, 123, 124, 126, 127, 128,
	130, 131, 133, 134, 135, 137, 138, 139, 141, 142, 143, 145, 146, 147, 149, 150,
	151, 153, 154, 155, 156, 158, 159, 160, 161, 162, 164, 165, 166, 167, 168, 170,
	171, 172, 173, 174, 175, 176, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
	188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
	204, 205, 205, 206, 207, 208, 209, 210, 211, 211, 212, 213, 214, 215, 215, 216,
	217, 218, 219, 219, 220, 221, 222, 222, 223, 224, 224, 225, 226, 226, 227, 228,
	228, 229, 230, 230, 231, 232, 232, 233, 233, 234, 235, 235, 236, 236, 237, 237,
	238, 238, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 244, 245,
	245, 246, 246, 246, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 250,
	251, 251, 251, 251, 252, 252, 252, 252, 253, 253, 253, 253, 253, 254, 254, 254,
	254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
	255, 255, 255, 256]

实现人脸美白

既然人脸美白的原理,以及美白的颜色映射表都给到了你。下面,我们就可以实现人脸美白效果,具体代码如下所示:

def face_whitening(fileName):
    img = cv2.imread(fileName)
    img = cv2.bilateralFilter(img, 19, 75, 75)
    height, width, n = img.shape
    img2 = img.copy()
    for i in range(height):
        for j in range(width):
            b = img2[i, j, 0]
            g = img2[i, j, 1]
            r = img2[i, j, 2]
            img2[i, j, 0] = Color_list[b]
            img2[i, j, 1] = Color_list[g]
            img2[i, j, 2] = Color_list[r]
    cv2.imwrite("59_1.jpg",img2)

    image = Image.open("59_1.jpg")
    # 锐度调节
    enh_img = ImageEnhance.Sharpness(image)
    image_sharped = enh_img.enhance(1.2)
    # 颜色均衡调节
    con_img = ImageEnhance.Contrast(image_sharped)
    image_con = con_img.enhance(1.2)
    image_con.save("59_2.jpg")

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


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

运行之后,效果如下:

OpenCV-Python实现人脸美白算法的实例

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

Python 相关文章推荐
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
python中zip和unzip数据的方法
May 27 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
python爬虫爬取网页表格数据
Mar 07 Python
python删除本地夹里重复文件的方法
Nov 19 Python
Python多图片合并PDF的方法
Jan 03 Python
python各层级目录下import方法代码实例
Jan 20 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
python 将Excel转Word的示例
Mar 02 Python
简单谈谈Python面向对象的相关知识
Jun 28 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
You might like
人族 Terran 魔法与科技
2020/03/14 星际争霸
使用PHP Socket写的POP3类
2013/10/30 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
jquery自定义表格样式
2015/11/23 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
js实现弹窗效果
2020/08/09 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
便捷提取python导入包的属性方法
2018/10/15 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
编辑硕士自荐信范文
2013/11/27 职场文书
环保倡议书500字
2014/05/15 职场文书
创卫工作总结2015
2015/04/22 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL