OpenCV实战项目- 抖音动态小表情
替换掉当前机器的文件位置即可运行:
‘C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml’
‘C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_eye.xml’
import numpy as np
import cv2
import time
import datetime
from PIL import Imagecap = cv2.VideoCapture(0)''' 人脸识别 '''def getface(img):# 人脸识别数据face_cascade = cv2.CascadeClassifier('C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')# 人眼识别数据eye_cascade = cv2.CascadeClassifier('C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_eye.xml')# 二值化,变为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 获取人脸识别数据faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:# 绘画人脸识别数据img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)# 根据人脸识别数据添加头像img = christmas(img, x, y, w, h)return imgdef christmas(img, x, y, w, h):im = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))# 你的贴纸地址mark = Image.open("hat/111.png")height = int(w * 987 / 1024)mark = mark.resize((w, height))layer = Image.new('RGBA', im.size, (0, 0, 0, 0))layer.paste(mark, (x, y - height + 100))out = Image.composite(layer, im, layer)img = cv2.cvtColor(np.asarray(out), cv2.COLOR_RGB2BGR)return imgvideoWriter = cv2.VideoWriter('testwrite.avi', cv2.VideoWriter_fourcc(*'MJPG'), 15, (1000, 563))while (cap.isOpened()):ret, frame = cap.read()if ret == True:# 从新定义图片大小img = cv2.resize(frame, (1000, 563))# 添加录像时间# img = addtime(img)# 实时识别img = getface(img)# 视频显示cv2.imshow('frame', img)# 保存视频videoWriter.write(img)if cv2.waitKey(10) & 0xFF == ord('q'):print("退出视频")breakelse:breakcap.release()
videoWriter.release()
cv2.destroyAllWindows()