python 识别图片中的人脸,并裁剪人脸,将图片转化成固定大小,并将图片再按照自己的后缀名存储起来

本文介绍了一种使用OpenCV库进行人脸检测的方法,通过Haar级联分类器识别图片中的人脸区域,并对检测到的人脸进行裁剪和尺寸标准化。此过程适用于处理包含单个人脸的图片,但在处理多人脸图片时可能遇到命名冲突的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


下列代码,识别图片中的人脸,并裁剪人脸,将图片转化成固定大小,再按照自己的后缀名存储起来


bug:我是用来识别单张图片中只有一个人脸的数据集,如果用来处理一张图片中的多个人脸,那么图片的命名可能会有bug


import cv2
import os
import glob
#最后剪裁的图片大小
size_m = 48
size_n = 48
def detect(img, cascade):
    rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30),flags=cv2.CASCADE_SCALE_IMAGE)
    if len(rects) == 0:
        return []
    rects[:, 2:] += rects[:, :2]
    return rects

cascade = cv2.CascadeClassifier("cascades\\haarcascade_frontalface_alt2.xml")
imglist=glob.glob("data/image/jaffe/*")
for list in imglist:
    
    #print(list)
    # cv2读取图像
    img = cv2.imread(list)
    dst=img
    rects=detect(dst,cascade)
    for x1,y1,x2,y2 in rects:
        #调整人脸截取的大小。横向为x,纵向为y
        roi = dst[y1+10 :y2+20, x1+10 :x2 ]
        img_roi = roi
        re_roi = cv2.resize(img_roi, (size_m, size_n))
        
        #新的图像存到data/image/jaffe_1
        f = "{}/{}".format("data/image", "jaffe_1")
        #print(f)
        if not os.path.exists(f):
            os.mkdir(f)
        #切割图像路径
        path=list.split(".")
        
        #新的图像存到data/image/jaffe_1   并以jpg 为后缀名
        cv2.imwrite("{}/{}_{}.jpg".format(f,path[1],path[2]), re_roi)

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值