其实效果和美颜相机差不太多,调用了openCV的bilateralFilter函数,一般用bilateralFilter来美化人脸比较好。原理就是用双边滤波对色差较大的边缘像素进行保留。如人的眼线,鼻梁,嘴唇等。优化的效果主要依赖自己调整bilateralFilter的第三个参数,越大的话效果越明显。不废话,贴代码。
import cv2 as cv
import numpy as np
def bi_demo(image):#边缘保留滤波
dst=cv.bilateralFilter(image,0,40,15)
cv.imshow("bi_demo",dst)
def shift_demo(image):#均值迁移
dst=cv.pyrMeanShiftFiltering(image,10,50)
cv.imshow("bi_demo",dst)
src1 = cv.imread('D:/555.jpg', cv.IMREAD_COLOR) # 读入彩色图片
#res=cv.resize(src1,(480,640),interpolation=cv.INTER_CUBIC)#第二个参数用来设置输出图像的长宽
print(src1.shape)
#cv.imwrite('D:/tupian/zelong3.jpg',res)
cv.namedWindow("input image",1)
cv.imshow('image1', src1)
bi_demo(src1)
k = cv.waitKey(0)
效果图
比较清楚的看到脸部的雀斑几乎消除,第二个参数越大消除的也就越多,美化效果也更好,太大的数值会导致图像过于模糊,建议50-60比较好,上图是40的参数。