用cv2从图片中识别出人脸存固定大小

4 篇文章 1 订阅
4 篇文章 0 订阅

一、找自己运行环境的cv2

  • 找cv2的包haarcascade_frontalface_default.xml
    一般都在所运行虚拟环境下的,控制台输入命令pip show opencv-python

pip show opencv-python

在这里插入图片描述

就是在这个路径下的cv2文件夹里,不要去opencv-python文件夹了。。。
haarcascade_frontalface_default.xml就在这里了,替换代码的这个路径
在这里插入图片描述

二、查找人脸

这里需要不断根据自己的数据集去调参scaleFactor、minNeighbors、minSize
输出的图片是可以设置的固定像素值
具体参数含义可以百度,如果有些自己看着很明显他裁剪不出来,那就保存下来重新调参再剪一次,即第二次就可以用Nohave文件夹下的作为输入文件夹,如此反复,节约数据

import cv2
import os
import glob
size_m = 512
size_n = 512

def detect(img, cascade):
    rects = cascade.detectMultiScale(img, scaleFactor=1.45, minNeighbors=3, minSize=(30, 80), flags=cv2.CASCADE_SCALE_IMAGE)
    if len(rects) == 0:
        return []
    rects[:, 2:] += rects[:, :2]
    return rects

cascade = cv2.CascadeClassifier("D:\software_learning\deeplearning\Anaconda\Anaconda3.7\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml") # 注意查看自己的包路径,如何找cv2看前面

imglist = glob.glob(r"E:\people_face\test_pic\new_pic\*") # 待处理数据集路径new_pic下面全是png或者jpg
#新图像存
for list in imglist:
    # print(list)
    img = cv2.imread(list)
    dst = img
    rects = detect(dst, cascade)
    path = list.split("\\")
    if len(rects):  # rects不为空则检测到人脸
        for x1, y1, x2, y2 in rects:
            roi = dst[y1:y2,x1:x2] # 剪切

            img_roi = roi
            re_roi = cv2.resize(img_roi, (size_m, size_n)) # 重新定义大小512*512

            reslut_path = r"E:\people_face\test_pic\res_pic\\" # 处理后的图片存在的路径下

            # print(path[4][:-4]) # 截取到原图片名(也可以自定义个数字累和计算),因为路径是第五个块,根据自己路径换,不清楚可以打印
            cv2.imwrite(reslut_path+path[4][:-4]+".png",re_roi)

    else: # 没有切的人脸选出来,放另一个文件夹
        os.rename(list, r"E:\people_face\Nohave\\"+path[4][:-4]+'.png')  # 换路径 src,dist路径

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanmy_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值