本篇是利用 python 来对图像进行磨皮祛斑,对人脸进行“美图”,首先来上效果图,第一张是原图,第二张是磨皮后的图(图源自互联网), 能够看出成果挺好而且很天然不会很失真
整个过程和根本代码如下:
先用双边滤波进行降噪,双边滤波是一种非线性滤波,可能达到去噪保边的成果。相比高斯滤波,还思考了灰度相似性,所以双边滤波是联合图像的空间邻近度和像素值类似度的一种折衷解决。
temp1 = cv2.bilateralFilter(img, 75, 255, 5)
而后将降噪后的图像减去原图像,提取须要解决的局部,能够可能到脸部有许多红色的斑点。temp2 = cv2.subtract(temp1, img)
再对提取来的局部进行高斯降噪解决
temp3 = cv2.GaussianBlur(temp2, (5,5), 0)
能够看到脸上那些点被打消了,脸布变得平滑了
temp4 = cv2.add(img, temp3)
而后再将降噪解决的局部和原图相加,取得最终磨皮后的图
所有代码:
import cv2
img = cv2.imread("pic")
temp4 = np.zeros_like(img)
temp1 = cv2.bilateralFilter(img, 75, 255, 5)
cv2.imshow("temp1", temp1)
temp2 = cv2.subtract(temp1, img)
cv2.imshow("temp2", temp2)
temp2 = cv2.add(temp2, (10, 10, 10, 128))
# cv2.imshow("temp 2_2", temp2)
# temp3 = cv2.GaussianBlur(temp2, (2 * v2 - 1, 2 * v2 - 1), 0)
temp3 = cv2.GaussianBlur(temp2, (5,5), 0)
cv2.imshow("temp 3", temp3)
temp4 = cv2.add(img, temp3)
cv2.imshow("temp 4", temp4)
dst = cv2.addWeighted(dst, p, temp4, 1 - p, 0.0)
dst = cv2.add(dst, (10, 10, 10, 255))
cv2.imshow("results", dst)