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 24 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
python中p-value的实现方式
Dec 16 Python
pytorch数据预处理错误的解决
Feb 20 Python
实例讲解Python 迭代器与生成器
Jul 08 Python
python如何删除列为空的行
Jul 17 Python
Python列表推导式实现代码实例
Sep 09 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
浅析Python的命名空间与作用域
Nov 25 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
用python修改excel表某一列内容的操作方法
You might like
php学习之 循环结构实现代码
2011/06/09 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
python删除某个字符
2018/03/19 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
Python 私有化操作实例分析
2019/11/21 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
《英英学古诗》教学反思
2014/04/11 职场文书
书法大赛策划方案
2014/06/04 职场文书
效能风暴心得体会
2014/09/04 职场文书
工程款催款函
2015/06/24 职场文书
小学庆六一主持词
2015/06/30 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书