一、开发前准备

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()函数用于在图像上绘制矩形。pt1和pt2参数是定义矩形的两个对角点,分别表示矩形的左上角和右下角的坐标。

具体来说,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、人脸信息的采集

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: