Python:OpenCV学习笔记(1)之训练数据

本文介绍了如何通过Python和OpenCV库从特定目录下的图片中提取人脸数据,包括人脸位置和ID,然后使用LBPHFaceRecognizer进行训练,并将数据保存。过程涉及图像预处理、人脸检测和识别技术的应用。

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

主体思路:
将某一目录下的图片转化为数组,获取每张图片中人脸部分的数据保存到事先创建好的列表中,同时获取每张图片的ID,同样保存在事先创建好的列表中,最后将训练后的数据保存。

import cv2 as cv
import os 
import sys
from PIL import Image
import numpy as np

def getImageAndLabels(path):
    facesSamples = []
    ids = []
    # 将图片路径保存在imagePaths 列表里
    # 先获取目录下图片名称再将名称与路径连接最后添加到imagePaths 列表里
    imagePaths = [os.path.join(path,f) for f in os.listdir(path)]
    print(imagePaths)
    # 检测人脸
    face_detector = cv.CascadeClassifier('E:/python/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    # 遍历列表中的图片
    for imagePath in imagePaths:
        # 打开图片
        PIL_img = Image.open(imagePath).convert('L')
        # 将图片转化为数组
        img_numpy = np.array(PIL_img,'uint8')
        faces = face_detector.detectMultiScale(img_numpy)
        # 获取每张图片的id
        id = int(os.path.split(imagePath)[1].split('.')[0])
        for x,y,w,h in faces:
            facesSamples.append(img_numpy[y:y + h,x:x + w])
            ids.append(id)
    return facesSamples,ids

if __name__ == "__main__":
    path = './data/tran/'
    # 获取图像数组和id标签组
    faces, ids = getImageAndLabels(path)
    # 获取循环对象
    recoginzer = cv.face.LBPHFaceRecognizer_create()
    recoginzer.train(faces,np.array(ids))
    # 保存数据
    recoginzer.write('./trainer/trainer.yml')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ydon?tkwhmeIS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值