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之从格式化表达式到方法
Sep 28 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
Python高级用法总结
May 26 Python
python pandas 如何替换某列的一个值
Jun 09 Python
python与字符编码问题
May 24 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
python exit出错原因整理
Aug 31 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
You might like
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
PHP 代码规范小结
2012/03/08 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
Python 中的with关键字使用详解
2016/09/11 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
python tkinter基本属性详解
2019/09/16 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
C++是不是类型安全的
2014/02/18 面试题
java程序员面试交流
2012/11/29 面试题
冰淇淋店创业计划书范文
2013/12/27 职场文书
关于运动会的稿件
2014/02/02 职场文书
预备党员政审材料
2014/02/04 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
大学生党员承诺书
2014/05/20 职场文书
超市客服工作职责
2014/06/11 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书