使用python抓取100张人脸图片

参考b站的一个视频,大家有兴趣可以去搜一下

注意:人脸识别分类器需要自己安装
就是这几个xml文件
在这里插入图片描述

运行这个程序

import cv2
import os

def CatchPICFromVideo(catch_pic_num,path_name):
    # 视频来源,可以来自一段已保存的视频,也可以来自于摄像头
    cap = cv2.VideoCapture(0)   # 获取摄像头的图像

    # 告诉opencv使用人脸识别分类器
    face_detector = cv2.CascadeClassifier("D:\software\Python37\Aaa\haarcascade_frontalface_default.xml")
    num = 0 # 图片的编号
    while cap.isOpened():  # 当摄像头是打开的
        ok, img = cap.read()  # 读取视频   # 读取每一帧图片
        grey_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 将图片转化为灰度图
        # 人脸检测  检测出一帧图片中的每一个人脸的位置   faceRects是一个元组,存放每一个人脸的位置
        faceRects = face_detector.detectMultiScale(grey_img, scaleFactor = 1.2,minNeighbors = 3,minSize= (70,70))
        if len(faceRects) > 0:  # 检测到人脸
            for facerect in faceRects:  # 遍历每一个人脸 可能一帧图片有多个人脸
                x, y, w, h = facerect  # 获取这张人脸的位置
                #将当前帧保存为图片
                if not os.path.exists(path_name):  # 如果当前目录不存在
                    os.mkdir(path_name)  # 创建这个目录
                img_name = '%s/%d.jpg' %(path_name, num)  # 给这张图片起一个名字
                image = img[y-10:y+h+10, x-10:x+w+10]  # 截取人脸部分扩大10像素的图片
                cv2.imwrite(img_name, image)  # 写入这张图片

                num += 1  # 图片名加1
                if num > (catch_pic_num): # 如果超过指定最大保存的数量退出循环
                    break

                # 画出矩形框
                cv2.rectangle(img, (x-10,y-10),(x+w-10,y+h-10),(0,255,0),2)  # 给检测到的人脸画矩形
                # 显示当前捕捉到了多少人脸图片,
                font = cv2.FONT_HERSHEY_SIMPLEX
                cv2.putText(img,'num:%d'%(num),(x-30,y-30),font,1,(255,0,255),1)  # 在图片上编辑字符

            if num > (catch_pic_num):
                break

            # 显示图像
            cv2.imshow('people',img)
            c = cv2.waitKey(100)
            if c & 0xff == ord('q'):
                break
    cap.release()  # 释放摄像头资源
    cv2.destroyAllWindows() # 释放窗口

if __name__ == '__main__':
    CatchPICFromVideo(100,'data/luatao')  # 获取100张图片,存放在data/luatao'目录中

执行过程:
在这里插入图片描述
执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值