玩转dlib-增加白眉毛处理

经常用美颜相机什么的,可以给自己增加许多挂饰,感觉很新奇。
自从学习了dlib,就发现原来dlib也支持这种处理
这种处理需要在提取68个特征点的基础上进行再次处理。
我这次增加的处理是把自己的黑眉毛变成了白眉毛,下次白眉大侠再演的话,可以找我给他们编辑,不用再把眉毛染白了
在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 14 21:56:08 2021

@author: yuyanchuan
利用dlib增加白眉毛处理
眉毛的特征点是18.19.20.21.22.23.24.25.26.27
"""



import dlib
import cv2
import os

predictor_path='shape_predictor_68_face_landmarks.dat'

detector=dlib.get_frontal_face_detector()

sp=dlib.shape_predictor(os.path.join("F:\code\Pythoncode\dlib\shape_predictor_68_face_landmarks",predictor_path))

point_size = 1
point_color = (0, 0, 255) # BGR
thickness = 4 # 可以为 0 、4、8

cap=cv2.VideoCapture(0)

while True:
    ret,frame=cap.read()
    #frame=cv2.imread("gyy1.png")
    #if not cap.isOpened():
        #print("打开摄像头")
    dets=detector(frame,1)
    img=frame.copy()
    print(frame.shape)
    num_faces=len(dets)
    
    if num_faces==0:
        print("没有发现人脸")
    cv2.putText(frame,'faces:{}'.format(num_faces),(10,30),cv2.FONT_HERSHEY_PLAIN,2,(0,0,255),2)
    faces=dlib.full_object_detections()
    for k,d in  enumerate(dets):
        faces.append(sp(frame,d))
        print(d.left())
        leftM=[]
        rightM=[]
        #cv2.rectangle(frame,(d.left(),d.top()),(d.right(),d.bottom()),[0,255,0],3)
        shape = sp(frame, d)
        for index, pt in enumerate(shape.parts()):
            pt_pos=(pt.x,pt.y)
            #cv2.circle(frame, pt_pos, point_size, point_color, thickness)
            #利用cv2.putText输出1-68
            font = cv2.FONT_HERSHEY_SIMPLEX
            #cv2.putText(frame, str(index+1),pt_pos,font, 0.3, (0, 0, 255), 1, cv2.LINE_AA)
            it=index+1
            if it>=18 and it<=22:
                leftM.append(pt_pos)
            elif it>=23 and it<=27:
                rightM.append(pt_pos)
        
        for index ,item in enumerate(leftM):
            startPos=None
            endPos=None
            if index==0:
                startPos=leftM[0]
            else:
                startPos=leftM[index-1]
                endPos=leftM[index]
            if startPos and endPos:
                cv2.line(frame,startPos,endPos,(255,255,255),10,8)
            
        for index ,item in enumerate(rightM):
            startPos=None
            endPos=None
            if index==0:
                startPos=rightM[0]
            else:
                startPos=rightM[index-1]
                endPos=rightM[index]
            if startPos and endPos:
                cv2.line(frame,startPos,endPos,(255,255,255),10,8)
        
        
    
    
    cv2.putText(frame,'press ESC quit',(10,450),cv2.FONT_HERSHEY_PLAIN,2,(0,0,255),2)    
    cv2.imshow('image',frame)
    

    if cv2.waitKey(10) == 27:
        break
    
cv2.destroyAllWindows()

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值