国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python給你的頭像加上圣誕帽

2020-02-16 11:27:06
字體:
來源:轉載
供稿:網友

引言

隨著圣誕的到來,大家紛紛@官方微信給自己的頭像加上一頂圣誕帽。當然這種事情用很多P圖軟件都可以做到。但是作為一個學習圖像處理的技術人,還是覺得我們有必要寫一個程序來做這件事情。而且這完全可以作為一個練手的小項目,工作量不大,而且很有意思。

用到的工具

OpenCV(畢竟我們主要的內容就是OpenCV…)

dlib(前一篇文章剛說過,dlib的人臉檢測比OpenCV更好用,而且dlib有OpenCV沒有的關鍵點檢測。)

用到的語言為Python。但是完全可以改成C++版本,時間有限,就不寫了。有興趣的小伙伴可以拿來練手。

流程一、素材準備

首先我們需要準備一個圣誕帽的素材,格式最好為PNG,因為PNG的話我們可以直接用Alpha通道作為掩膜使用。我們用到的圣誕帽如下圖:

我們通過通道分離可以得到圣誕帽圖像的alpha通道。代碼如下:

r,g,b,a = cv2.split(hat_img) rgb_hat = cv2.merge((r,g,b))cv2.imwrite("hat_alpha.jpg",a)

為了能夠與rgb通道的頭像圖片進行運算,我們把rgb三通道合成一張rgb的彩色帽子圖。Alpha通道的圖像如下圖所示。

二、人臉檢測與人臉關鍵點檢測

我們用下面這張圖作為我們的測試圖片。

下面我們用dlib的正臉檢測器進行人臉檢測,用dlib提供的模型提取人臉的五個關鍵點。代碼如下:

  # dlib人臉關鍵點檢測器  predictor_path = "shape_predictor_5_face_landmarks.dat"  predictor = dlib.shape_predictor(predictor_path)   # dlib正臉檢測器  detector = dlib.get_frontal_face_detector()  # 正臉檢測  dets = detector(img, 1)  # 如果檢測到人臉  if len(dets)>0:     for d in dets:      x,y,w,h = d.left(),d.top(), d.right()-d.left(), d.bottom()-d.top()      # x,y,w,h = faceRect       cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2,8,0)      # 關鍵點檢測,5個關鍵點      shape = predictor(img, d)      for point in shape.parts():        cv2.circle(img,(point.x,point.y),3,color=(0,255,0))      cv2.imshow("image",img)      cv2.waitKey() 

這部分效果如下圖:

三、調整帽子大小

我們選取兩個眼角的點,求中心作為放置帽子的x方向的參考坐標,y方向的坐標用人臉框上線的y坐標表示。然后我們根據人臉檢測得到的人臉的大小調整帽子的大小,使得帽子大小合適。

# 選取左右眼眼角的點  point1 = shape.part(0)  point2 = shape.part(2)  # 求兩點中心  eyes_center = ((point1.x+point2.x)//2,(point1.y+point2.y)//2)  # cv2.circle(img,eyes_center,3,color=(0,255,0))   # cv2.imshow("image",img)  # cv2.waitKey()  # 根據人臉大小調整帽子大小  factor = 1.5  resized_hat_h = int(round(rgb_hat.shape[0]*w/rgb_hat.shape[1]*factor))  resized_hat_w = int(round(rgb_hat.shape[1]*w/rgb_hat.shape[1]*factor))  if resized_hat_h > y:    resized_hat_h = y-1  # 根據人臉大小調整帽子大小resized_hat = cv2.resize(rgb_hat,(resized_hat_w,resized_hat_h))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌什县| 阳信县| 济宁市| 旬阳县| 河津市| 开阳县| 尖扎县| 云南省| 融水| 虹口区| 罗平县| 漳平市| 岑溪市| 柳州市| 安龙县| 清涧县| 太保市| 元谋县| 周宁县| 信丰县| 北海市| 西乌| 嘉善县| 台南市| 涟源市| 靖宇县| 安康市| 托克托县| 镇坪县| 沧源| 灵寿县| 井冈山市| 阆中市| 勐海县| 钟山县| 马鞍山市| 临海市| 托克逊县| 昌都县| 汝州市| 元氏县|