人脸检测+识别---06人脸截取(OpenCV+PyCharm适用于高中信息技术新教材)持续更新中……

该博客介绍了一个Python代码示例,演示如何利用OpenCV库检测图像中的人脸并进行截取。通过加载预训练的Haar级联分类器,对灰度图像进行人脸检测,然后在检测到人脸的区域画出矩形并将其裁剪保存。当按下's'键时,程序会保存截取的人脸图片。
摘要由CSDN通过智能技术生成

06人脸截取

人脸截取是指,在图像上用矩形标记出人脸后,将矩形区域保存为另一个文件。若图像中有标记出多张人脸,则将每张人脸保存为一个文件。

import cv2  # 导入opencv库

def face_intercept_demo(img):
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    face_detect=cv2.CascadeClassifier("./venv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml")
    faces=face_detect.detectMultiScale(gray,1.1,5)
    if len(faces)>0:   # 大于0则检测到人脸
        cropped=[]   # 空列表,存储每张人脸的坐标
        for face in faces:
            x,y,w,h=face
            cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)  # 框出人脸
            cropped.append(img[y:y+h,x:x+w])                      # 截取的坐标范围为[y0:y1, x0:x1]
    cv2.imshow("result", img)

    for i in range(len(faces)):
        cv2.imshow("InterceptFace" + str(i + 1), cropped[i]) # 显示需截取的人脸

    if cv2.waitKey(0) == ord("s"):        # 等待按下小写字母s键,执行保存截取的人脸图像
        for i in range(len(faces)):
           cv2.imwrite("./faces"+str(i+1)+".png", cropped[i])


img = cv2.imread("./images/DSC04753.jpg")
face_intercept_demo(img)
cv2.destroyAllWindows()  # 释放内存

其中用函数face_intercept_demo(img)来实现人脸截取(含保存)的功能。

    if len(faces)>0:   # 大于0则检测到人脸
        cropped=[]   # 空列表,存储每张人脸的坐标
        for face in faces:
            x,y,w,h=face
            cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)  # 框出人脸
            cropped.append(img[y:y+h,x:x+w])                      # 截取的坐标范围为[y0:y1, x0:x1]

以上这段代码的大致含义是:当检测到的人脸数大于0时(即图像中有人脸),设置一个空列表 cropped 来存储每张人脸的坐标范围。
之后的遍历每张人脸和之前的代码一致,这里就不再赘述了。
重点强调一下,人脸截取的坐标范围为[y:y+h,x:x+w],一定是[y0:y1,x0:x1],y坐标在前,x坐标在后。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值