-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakeup.py
66 lines (64 loc) · 2.38 KB
/
Makeup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import cv2
import dlib
import numpy as np
def empty(a):
pass
cv2.namedWindow("BGR")
cv2.resizeWindow("BGR",400,240)
cv2.createTrackbar("Blue","BGR",0,255,empty)
cv2.createTrackbar("Green","BGR",0,255,empty)
cv2.createTrackbar("Red","BGR",0,255,empty)
def create(img, points,masked = False, cropped = True):
if masked:
mask = np.zeros_like(img)
mask = cv2.fillPoly(mask,[points],(255,255,255))
# cv2.imshow("mask",mask)
img = cv2.bitwise_and(img,mask)
if cropped:
b = cv2.boundingRect(points)
x,y,w,h = b
imgCrop = img[y:y+h,x:x+w]
imgCrop = cv2.resize(imgCrop,(0,0),None,5,5)
return imgCrop
else:
return mask
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
while True:
img = cv2.imread("./img.png")
img = cv2.resize(img,(0,0), None,2,2)
imgOriginal = img.copy()
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = detector(imgGray)
for face in faces:
x1,y1 = face.left(),face.top()
x2,y2 = face.right(),face.bottom()
# imgOri = cv2.rectangle(imgOriginal,(x1,y1),(x2,y2),(0,255,0),1)
landmarks = predictor(imgGray,face)
mypoints = []
for n in range(0,68):
x = landmarks.part(n).x
y = landmarks.part(n).y
mypoints.append([x,y])
# cv2.circle(imgOriginal,(x,y),2,(0,0,255),3)
# cv2.putText(imgOriginal,str(n),(x,y-10),cv2.FONT_HERSHEY_COMPLEX,0.5,(0,255,0),1)
mypoints = np.array(mypoints)
lips = create(img,mypoints[48:61],masked=True,cropped=False)
# cv2.imshow("Lip",lips)
imgColor = np.zeros_like(lips)
a = cv2.getTrackbarPos("Blue","BGR")
q = cv2.getTrackbarPos("Green","BGR")
w = cv2.getTrackbarPos("Red","BGR")
imgColor[:] = a,q,w
# cv2.imshow("Color",imgColor)
imgColor = cv2.bitwise_and(lips,imgColor)
imgColor = cv2.GaussianBlur(imgColor,(9,9),20)
imgOriginal_Image = cv2.cvtColor(imgOriginal,cv2.COLOR_BGR2GRAY)
imgOriginal_Image = cv2.cvtColor(imgOriginal_Image,cv2.COLOR_GRAY2BGR)
imgColor =cv2.addWeighted(imgOriginal_Image,1,imgColor,0.8,0)
cv2.imshow("BGR",imgColor)
cv2.imshow("Original_Image",imgOriginal)
key = cv2.waitKey(1)
if key == ord("q"):
break
cv2.destroyAllWindows()