具體過(guò)程分為以下四步
面部標(biāo)志提取
dlib提供了實(shí)現(xiàn)面部特征提取的接口:
get_landmarks
用于檢測(cè)面部
關(guān)鍵特征點(diǎn)的坐標(biāo)
普式分析法(Procrustes Analysis)計(jì)算人臉對(duì)齊映射矩陣
仿射變換
向量的平移
放縮及旋轉(zhuǎn)變換
圖像的平移
放縮及旋轉(zhuǎn)都是
原始圖像的坐標(biāo)進(jìn)行計(jì)算兼砖。
怎么找到映射矩陣M
便是普式分析法
輸出是矩陣M
transformation_from_points()
利用opencv及計(jì)算得到的映射矩陣對(duì)圖像進(jìn)行映射
接受三個(gè)參數(shù)
需要變換的原始圖像
映射矩陣M 以及變換的圖像大小
4 顏色(膚色厕九、光線)校正
這里使用了顏色平衡
但不是直接使用全圖的常數(shù)比例因子
而是采用每個(gè)像素的局部比例因子
mask提取
蒙版會(huì)畫(huà)出兩個(gè)白色的凸多邊形
幫助消除剩下的不連續(xù)部分
最后的圖像疊加
combined_mask
相加
從為得到最后的換臉結(jié)果圖
好了听盖,下面來(lái)看案例實(shí)戰(zhàn)操作
程序思路
用 decect 接口
獲取人臉關(guān)鍵點(diǎn)
return_landmark 參數(shù)
不能為 0 不然不會(huì)返回人臉關(guān)鍵點(diǎn)
用 mergeface 接口,合成臉部圖像
注意圖片文件大小不超過(guò) 2 MB
示例運(yùn)行代碼
封裝一個(gè)多張照片的合成函數(shù)
注意邊界特殊情況
圖片1:
圖片2:
效果: