cv2实现人脸识别(图片、读写视频)

cv2实现人脸识别(图片、读写视频)_第1张图片

图片中的人脸检测 

cv2实现人脸识别(图片、读写视频)_第2张图片

haarcascade_frontalface_default.xml:人脸识别中的默认分类器,主要用于人脸图片中的人脸轮廓的识别。 

下载地址:haarcascades下载地址

import cv2

nba = cv2.imread('nba.jpg')

# 人脸数据,级联分类器,给人脸特征数据,返回可以识别人脸的对象
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

face_zone = detector.detectMultiScale(nba)

for x,y,w,h in face_zone:
    cv2.rectangle(nba, pt1=(x,y), pt2=(x+w,y+h), color=[0,0,255])

cv2.imshow('nba',nba)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2实现人脸识别(图片、读写视频)_第3张图片

视频中人脸检测 

cv2实现人脸识别(图片、读写视频)_第4张图片

# coding=utf-8
import cv2

# 如果是对视频进行检测,那么替换下面语句
cap = cv2.VideoCapture('a.avi')

# 通过摄像头检测自己的人脸
#cap = cv2.VideoCapture(0)

# 获得摄像头帧大小
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + 1
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + 1

# 保存文件的格式
videoWriter = cv2.VideoWriter('b.avi',cv2.VideoWriter_fourcc('M','P','4','2'),24,(w,h))

# 自适应窗口大小
cv2.namedWindow('video', cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)

# 查看视频一秒多少帧 1000/20=50
#print(cap.get(propId=cv2.CAP_PROP_FPS))
# 一共多少帧 2701.0
#print(cap.get(propId=cv2.CAP_PROP_FRAME_COUNT))

# 人脸数据,级联分类器,给人脸特征数据,返回可以识别人脸的对象
detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

while cap.isOpened():
    # 获得每帧数据
    flag,frame = cap.read()
    if flag ==False:
        break
    # 转化为灰度图像
    gray = cv2.cvtColor(frame,code=6)
    # 人脸检测获得图像区域
    face_zone = detector.detectMultiScale(gray)
    # 针对人脸区域画图
    for x,y,w,h in face_zone:
        cv2.circle(frame,center=(x+w//2,y+h//2),radius=w//2,color=[0,0,255],thickness=2)
    # 写入视频流中
    videoWriter.write(frame)

    if flag == False:
        break

    cv2.imshow('video',frame)
    # 按q退出
    if ord('q') == cv2.waitKey(5):
        break

cv2.destroyAllWindows()
cap.release()
videoWriter.release()

 

你可能感兴趣的:(OpenCV)