python opencv 人脸识别(第三部分:方框的绘制,实现人脸检测)

3 篇文章 0 订阅
3 篇文章 0 订阅
本文介绍了使用Python的OpenCV库进行图像处理,包括在图像上绘制矩形以及实现简单的人脸检测。通过cv2.rectangle函数绘制矩形,cv2.CascadeClassifier进行人脸检测,结合灰度图像处理提高识别效率。
摘要由CSDN通过智能技术生成

一、开发前准备

pycharm版本:2023.1
python版本:3.7.5
opencv-python版本:4.5.4.60

二、图像上方框的绘制

在图像上绘制方框的代码如下:

import cv2

img = cv2.imread('st.jpg')
cv2.imshow('test', img)
x, y, w, h = 100, 100, 100, 100
# 具体来说,pt1参数是矩形左上角的点的坐标,pt2参数是矩形右下角的点的坐标。这两个参数共同定义了矩形的位置和大小。
cv2.rectangle(img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255), thickness=2)
cv2.imshow('test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

完成效果如下图
在这里插入图片描述

cv2.rectangle()函数用于在图像上绘制矩形pt1pt2参数是定义矩形的两个对角点,分别表示矩形的左上角和右下角的坐标

具体来说,pt1参数是矩形左上角的点的坐标pt2参数是矩形右下角的点的坐标。这两个参数共同定义了矩形的位置和大小。

在上面的代码中,pt1的坐标为(x, y),表示矩形左上角的点的坐标为(x, y),pt2的坐标为(x+w, y+h),表示矩形右下角的点的坐标为(x+w, y+h)。因此,矩形的宽度为w,高度为h。

color参数定义了矩形的颜色,(0, 0, 255)表示蓝色。thickness参数定义了矩形的线宽,这里设置为2。

三、实现简单的人脸检测

实现人脸检测的代码如下:

import cv2


def face_detect_demo(face_img):
    # 灰度处理图像
    gray_img = cv2.cvtColor(face_img, cv2.COLOR_BGR2GRAY)
    # 选择分类器
    face_detect = cv2.CascadeClassifier(r'C:\python\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_alt.xml')
    # 对灰度图进行特征提取
    face = face_detect.detectMultiScale(gray_img)
    for x, y, w, h in face:
        cv2.rectangle(face_img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255), thickness=2)
    cv2.imshow('test', face_img)


img = cv2.imread('st.jpg')
face_detect_demo(img)
while True:
    if ord('f') == cv2.waitKey(0):
        break

cv2.destroyAllWindows()

cv2.CascadeClassifier() 方法详解:
实现人脸检测需要用到OpenCV中的级联分类器CascadeClassifier来加载训练好的人脸检测器模型,训练好的模型保存在指
定路径下的XML文件中,比如我的就是C:\python\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_alt.xml,可
以根据个人实际情况在下载了cv2库的python目录里面找到。

face_detect.detectMultiScale() 方法详解:
这行代码使用前面加载的人脸检测器face_detect对输入的灰度图像gray_img进行人脸检测,检测结果将存储在变量face中。

具体来说,detectMultiScale()函数采用滑动窗口的方式,在输入图像上搜索可能的人脸区域。该函数可以设置多个参数,用于控制人脸检测的灵敏度、最小检测尺寸、最大检测尺寸等。函数的返回值face是一个包含检测到的人脸矩形区域的列表,每个矩形用(x, y, w, h)表示,其中(x, y)是矩形左上角的坐标,w和h是矩形的宽度和高度。

关于人脸识别为什么要用灰度图的原因

在进行人脸识别任务时,一般需要将图像转换为灰度图像进行处理。这是因为:

1、灰度图像占用的存储空间更小,可以降低计算成本。灰度图像只有一个通道,每个像素只需要用一个字节表示,而彩色图像则需要三个通道,每个像素需要用三个字节表示。这意味着,使用灰度图像可以在不降低图像质量的情况下,大幅降低计算和存储的成本。

2、灰度图像可以去除颜色信息对识别的影响。在人脸识别中,颜色信息并不是识别人脸所必需的,反而会带来很多干扰。比如,同一个人在不同的光照条件下,肤色可能会有较大差异,这会使得人脸识别算法难以正确识别。使用灰度图像可以去除这些干扰,提高人脸识别的准确率。

3、灰度图像可以提高算法的鲁棒性。在彩色图像中,不同通道的像素可能会因为光照条件、白平衡等因素而出现较大差异。而在灰度图像中,所有像素都是单一的数值,可以更好地抵抗这些干扰,提高算法的鲁棒性。

综上所述,将彩色图像转换为灰度图像是进行人脸识别任务时的常见操作,可以提高计算效率、去除干扰,提高算法的准确性和鲁棒性。

四、总结

该部分讲了如何进行方框的绘制以及人脸检测功能是如何实现的

下一部分:1、视频检测;2、人脸信息的采集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值