opencv项目5--简单的人脸检测和保存图片

通过 opencv现有的人脸检测模型  -------     haarcascade_frontalface_alt.xml

,对实时视频中的人脸进行检测,通过循环,对每一帧图像进行灰度化处理,利用检测到的人脸返回对应的坐标,进行对图像的矩形框绘制,并通过对应的x,y,w,h。可裁剪出我们感兴趣的ROI区域,即人脸区域,然后进行图像的裁剪和保存,涉及python基础的保存文件,if判断,循环等知识。

import time
import cv2
video=cv2.VideoCapture(0)
face_data=cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
name=1
flag=False
epoch=0
start=time.time()
while True:
    #过一段时间输出一次
    if epoch% 10==0:
        print('输入q结束人脸系统,输入a保存当前人脸')
    open,cap=video.read()
    if open==False:
        print('无法调用摄像头')
        break
    gray=cv2.cvtColor(cap,cv2.COLOR_BGR2GRAY)#将每一帧图片给进行灰度化
    face=face_data.detectMultiScale(gray)#将检测到的人脸图像(坐标)以列表形式返回
    for x,y,h,w in face:
        face_picture=gray[y:y+w,x:x+h]#裁剪灰度图像中的人脸的图像
        #我们需要统一尺寸
        face_picture=cv2.resize(face_picture,dsize=(80,80))
        #通过调用命令及逆行保存图片
        if flag==True:
            #将获取的人脸数据图片进行保存
            cv2.imwrite(f'./face picture/{name}.jpg',face_picture)
            print(face_picture.shape)
            name+=1
        cv2.rectangle(cap,pt1=(x,y),pt2=(x+h,y+w),color=[0,0,255],thickness=3)#对图片上的人脸进行框选
        #只截取20张照片
    if name>20:
        print('人脸照片截取成功')
        break
    frame = cv2.flip(cap, 1)  # 摄像头是和人对立的,将图像左右调换回来正常显示。
    cv2.imshow('face', frame)  # 展示人脸识别的图片
    key = cv2.waitKey(1000//24)  # 设置等待多长时间
    if key ==ord('q'):#按q退出系统
        break
    if key==ord('a'):#当按键为a时,进行保存人脸数据
        flag=True
        print('已经启动----正在截取人脸')
    epoch+=1
over=time.time()
time=int(over-start)
print(f'一共消耗的时间是{time}s')
cv2.destroyAllWindows()#关闭窗口
video.release()#释放摄像头资源

#查看你保存的人脸的数据
def aaa():
    import os
    import cv2
    import numpy as np
    kkk=[]
    lists=os.listdir('./face  picture')#调用系统来查找列表中相应文件夹
    for l in lists:
        print(l)
        ppp=cv2.imread(f'./face  picture/%s'%l)#依次读取照片
        print(ppp.shape)
        ppp_=ppp[:, :, 0]#将三维图片转换成二维图片
        kkk.append(ppp_)
    face=np.asarray(kkk)#转换为数组
    print(face.shape)#可以知道数组内有多少个照片以及尺寸

仅供学习参考,如有不足,敬请指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值