调用摄像头识别人脸
import matplotlib.pyplot as plt
import cv2
face_detector=cv2.CascadeClassifier('./opencv/haarcascade_frontalface_alt.xml')
#调用人脸识别算法
cap=cv2.VideoCapture(0)#打开摄像头
flag,frame=cap.read()#打开摄像头,读取摄像内容
if not flag:
print('she xiang tou diao yong shibai')
lss_data=cv2.imread('lss.jpg')
lss_data=lss_data[50:750,0:650]#获得头像内容
while flag:
face_zone=face_detector.detectMultiScale(frame,scaleFactor=1.1,minNeighbors=12)
#找到区域,第一个参数摄像头展现图像的区域,第二个识别区域大小,第三个锻炼次数
for x,y,w,h in face_zone:#把相关的内容拿出来
cv2.rectangle(frame,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,255],thickness=2)#选中
#画框框,pt1,pt2框的坐标参数
lss_head=cv2.resize(lss_data,dsize=(w,h))
flag,frame=cap.read()
frame[y:y+h,x:x+w]=lss_head
cv2.imshow('capture',frame)#展示
if cv2.waitKey(1000//24)== ord('q'):#ord('q')-->q的ASCII值
break
flag,frame = cap.read()
cv2.waitKey(0)#等到任意一个值
cv2.destroyAllWindows()#把所有窗口都销毁
输出:
启动摄像头
2.识别视频中的人脸
import matplotlib.pyplot as plt
import cv2
import numpy as np
face_detector=cv2.CascadeClassifier('opencv/haarcascade_frontalface_alt.xml')
cap=cv2.VideoCapture('rl.mp4')#打开视频
fourcc=cv2.VideoWriter_fourcc('M','P','4','2')#设置视频中的编码
fps=cap.get(cv2.CAP_PROP_FPS)#获取视频中的帧率内容
w=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#获取视频空间宽度
h=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))#获取视频空间高度
lss_data=cv2.imread('lss.jpg')
lss_data=lss_data[50:750,0:650]#获得头像内容
video_writer=cv2.VideoWriter(filename = './rl.avi',fourcc=fourcc,fps=fps,frameSize=(w,h))
#重写新视频
flag,frame=cap.read()#读取视频中的一帧内容
while flag:#如果读的一帧有内容
face_zone=face_detector.detectMultiScale(frame,scaleFactor=1.1,minNeighbors=12)
#读取的区域
for x,y,w,h in face_zone:#获取视频区域的坐标值
#cv2.rectangle(frame,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,255])
#将一帧画框框
lss_head=cv2.resize(lss_data,dsize=(w,h))
frame[y:y+h,x:x+w]=lss_head
cv2.imshow('rl',frame)#将一帧展示成图片
video_writer.write(frame)#保存新的视频
lag,frame=cap.read()#读取下一帧视频
if cv2.waitKey(1)==ord('q'):
break
cv2.destroyAllWindows()#把所有窗口都销毁
cap.release()
video_writer.release()