人臉磨皮是最基礎的人臉美顏效果。主要分為祛斑,祛痘,淡化黑眼圈等步驟。通過前面的學習相信大家一眼都看得出來我們需要干什么才能識別人臉磨皮效果。
因為磨皮之后,臉部的雜質基本上就沒有了,也可以說丟失了細節(jié)。那么肯定需要用到濾波函數(shù)。濾波的過程就是把圖像的每一個像素值輸入過濾器,得到平滑的圖像。
而我們常用的濾波有均值濾波,高斯濾波以及雙邊濾波三種,到底選用那種濾波呢?
首先,均值濾波會因為是用周圍像素的平均值代替原像素值,肯定會導致圖像過于模糊,所以排除掉。其次,高斯濾波與均值濾波原理類似,只是高斯濾波器的模板系數(shù)會隨著距離模板中心的增大而減小,雖然可以減弱圖像的模糊程度,但是圖像邊緣信息會丟失。
那么,只剩一個濾波了,也就是雙邊濾波器。因為它同時綜合了高通濾波器和a-截尾均值過濾器的疊加效果,即可以保證圖像不是非常模糊,也可以保留圖像邊緣信息。
而人臉磨皮原理的步驟分為如下3個步驟:
因為,不管上面3種濾波如何,都會導致一定的模糊(只是相對來說誰更優(yōu)而已),所以需要對圖像進行融合與銳化的操作。這樣,可以保留一些圖像的細節(jié),以增強圖像的真實感。
其中,圖像融合使用的函數(shù)就是cv2.addWeighted()圖像加權函數(shù)。融合的是原圖與雙通濾波后的圖像。
最后,圖像銳化使用的PIL庫進行操作,使用它的ImageEnhance.Sharpness()函數(shù)自動調節(jié)圖像的銳度與對比度。
實現(xiàn)人臉磨皮效果
既然我們已經完全掌握了人臉磨皮的原理。下面,我們來直接實現(xiàn)人臉的磨皮效果,具體的代碼如下所示:
# 人臉磨皮
def facial_dermabrasion_effect(fileName):
img = cv2.imread(fileName)
blur_img = cv2.bilateralFilter(img, 31, 75, 75)
#圖像融合
result_img = cv2.addWeighted(img, 0.3, blur_img, 0.7, 0)
cv2.imwrite("58_1.jpg", result_img)
image = Image.open("58_1.jpg")
# 銳度調節(jié)
enh_img = ImageEnhance.Sharpness(image)
image_sharped = enh_img.enhance(1.5)
# 對比度調節(jié)
con_img = ImageEnhance.Contrast(image_sharped)
image_con = con_img.enhance(1.15)
image_con.save("58_2.jpg")
img1 = cv2.imread("58.jpg")
img2 = cv2.imread("58_2.jpg")
cv2.imshow("1", img1)
cv2.imshow("2", img2)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == "__main__":
facial_dermabrasion_effect("58.jpg")
運行之后,效果如下:
這段代碼的參數(shù)都是可以調整的,并不是一層不變的,感興趣的讀者可以自己調節(jié)參數(shù)試試效果,當然人臉磨皮只是看起來皮膚光滑了。下面結合美白的效果,就可以實現(xiàn)相機的那種美顏。
到此這篇關于OpenCV-Python實現(xiàn)人臉磨皮算法的文章就介紹到這了,更多相關OpenCV 人臉磨皮內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 超詳細注釋之OpenCV實現(xiàn)視頻實時人臉模糊和人臉馬賽克
- 超詳細注釋之OpenCV dlib實現(xiàn)人臉采集
- 手把手教你利用opencv實現(xiàn)人臉識別功能(附源碼+文檔)
- opencv基于Haar人臉檢測和眼睛檢測
- 基于Opencv制作的美顏相機帶你領略美顏特效的效果