背景
朋友给了个证件磨皮的需求。研究了实现方式,记录一下。
实现原理
大神提供的算法:
Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ;
大神本神传送门,该算法其实是对 PS 的一种磨皮方案的脚本实现。
Python + OpenCV 实现
网上看到的一个基于上述公式的 python 实现方案beauty_face,但是他再线性光叠加时出错,修正后如beauty_face2(由于对Python矩阵运算不熟悉使用了比较笨的方法实现), 具体见代码:
#!/bin/python
# 祛痘美白
import numpy as np
import cv2
def beauty_face(img):
'''
Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ;
https://my.oschina.net/wujux/blog/1563461
'''
dst = np.zeros_like(img)
#int value1 = 3, value2 = 1; 磨皮程度与细节程度的确定
v1 = 3
v2 = 1
dx = v1 * 5 # 双边滤波参数之一
fc = v