一、人脸检测
案例代码如下:
import cv2
import numpy as npvideo = cv2.VideoCapture('1.mp4')
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
while True:retval,image = video.read() # retval boolean类型表名是否获得了图片if not retval:print('视频读取完成,没有图片')breakfaces = face_detector.detectMultiScale(image)for x,y,w,h in faces:cv2.rectangle(image,pt1=(x,y),pt2 = (x+w,y+h),color=[0,0,255],thickness=2)cv2.imshow('video',image)key = cv2.waitKey(1)if key == ord('q'):breakcv2.waitKey(1)
video.release()
二、马赛克处理
视频帧率、宽度、高度、图片个数计算:
import cv2
import numpy as npvideo = cv2.VideoCapture('1.mp4')
# 获得视频中的属性
fps = video.get(propId=cv2.CAP_PROP_FPS) #得到帧率
width = video.get(propId=cv2.CAP_PROP_FRAME_WIDTH) #宽度
height = video.get(propId=cv2.CAP_PROP_XI_HEIGHT) #高度
count = video.get(propId=cv2.CAP_PROP_FRAME_COUNT) #多少图片
print('--视频帧率',fps)
print(width,height,count)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
while True:retval,image = video.read() # retval boolean类型表名是否获得了图片if not retval:print('视频读取完成,没有图片')breakfaces = face_detector.detectMultiScale(image)for x,y,w,h in faces:# cv2.rectangle(image,pt1=(x,y),pt2 = (x+w,y+h),color=[0,0,255],thickness=2)face = image[y:y+h,x:x+w]face = face[::10,::10]face = np.repeat(face,10,axis=0)face = np.repeat(face,10,axis =1)image[y:y+h,x:x+w] = face[:h,:w]cv2.imshow('video',image)key = cv2.waitKey(1)if key == ord('q'):breakcv2.waitKey(1)
video.release()
三、写视频
案例代码如下:
import cv2
import numpy as npvideo = cv2.VideoCapture('1.mp4')
wr = cv2.VideoWriter(filename = 'gray.mp4',fourcc = cv2.VideoWriter.fourcc(*'MP4'),fps = 24, #视频帧率framesize = (640,360)) #图片尺寸
# 获得视频中的属性
fps = video.get(propId=cv2.CAP_PROP_FPS) #得到帧率
width = video.get(propId=cv2.CAP_PROP_FRAME_WIDTH) #宽度
height = video.get(propId=cv2.CAP_PROP_XI_HEIGHT) #高度
count = video.get(propId=cv2.CAP_PROP_FRAME_COUNT) #多少图片
print('--视频帧率',fps)
print(width,height,count)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
while True:retval,image = video.read() # retval boolean类型表名是否获得了图片if not retval:print('视频读取完成,没有图片')breakimage = cv2.resize(image,(640,360))gray = cv2.cvtColor(image,code = cv2.COLOR_BGR2GRAY)np.repeat(gray.reshape(360,640,1),3,axis=2) #蓝绿红变为三维,但值是一样的# wr.write(gray)faces = face_detector.detectMultiScale(image)for x,y,w,h in faces:# cv2.rectangle(image,pt1=(x,y),pt2 = (x+w,y+h),color=[0,0,255],thickness=2)face = image[y:y+h,x:x+w]face = face[::10,::10]face = np.repeat(face,10,axis=0)face = np.repeat(face,10,axis =1)image[y:y+h,x:x+w] = face[:h,:w]wr.write(image) #彩色图片是三维的,而黑白图片是二维的cv2.imshow('video',image)key = cv2.waitKey(1)if key == ord('q'):breakcv2.waitKey(1)
video.release()
wr.release()
四、摄像头识别人脸
案例代码如下:
import cv2
import numpy as np# 打开本机摄像头
cap = cv2.VideoCapture(0)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')while True:flag,frame = cap.read() #flag是否读取了图片if not flag:break# 转为灰度图片gray = cv2.cvtColor(frame,code = cv2.COLOR_BGR2GRAY)faces = face_detector.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=10)for x,y,w,h in faces:cv2.rectangle(frame,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,255],thickness=2)cv2.imshow('face',frame)key = cv2.waitKey(1000//24)if key == ord('q'):breakcv2.destroyAllWindows()
cap.release()