人像美白的python实现

本文介绍了一个人像美白方案,该方案利用肤色分割的mask图,结合OpenCV库进行图像处理,包括膨胀、腐蚀和模糊操作,然后应用美白算法调整图像亮度和色彩,最终得到自然的美白效果。代码示例展示了如何实现这一过程。
摘要由CSDN通过智能技术生成
人像美白在现在的美颜功能里面几乎属于必备的,各家的方案都不太一致,本文主要介绍一种基于肤色分割的人像美白方案。
首先得将人像进行皮肤分割,具体最好是使用AI模型,这里就不展开了,本人侧重点是美白算法,所以这里直接使用了一张皮肤分割好的mask图。
mask图的效果如下图所示,白色区域为皮肤区域,黑色区域为非皮肤区域。

 python代码如下:

import cv2
import numpy as np


def skin_whiten(img, skin_mask, whitening_degree=1.0):
    kernel_size = 30
    dilate_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (kernel_size, kernel_size))
    erode_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (kernel_size, kernel_size))
    skin_mask = cv2.dilate(skin_mask, dilate_kernel, 1)
    skin_mask = cv2.erode(skin_mask, erode_kernel, 1)
    skin_mask = cv2.blur(skin_mask, (20, 20)) / 255.0
    skin_mask = cv2.resize(skin_mask, (img.shape[1], img.shape[0]))
    skin_mask[:, :, 0] *= 0.75
    skin_mask[:, :, 1] *= 0.75
    whiten_mask = skin_mask * 0.2 * whitening_degree + 0.5
    img = img / 255.0
    output_pred = (-2 * whiten_mask + 1) * img * img + 2 * whiten_mask * img
    output_pred = output_pred * 255.0
    return output_pred


img = cv2.imread("tmp/17.png")
mask = cv2.imread("tmp/17_mask.jpg")
res_img = skin_whiten(img=img, skin_mask=mask, whitening_degree=2.0)
cv2.imwrite("tmp/17_whiten.jpg", res_img)

效果图如下:

 

我们可以看到,上图的美白效果还是很自然,而且逻辑也非常简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值