人脸检测+识别

您所在的位置:网站首页 python人脸检测并统计人数 人脸检测+识别

人脸检测+识别

2023-09-13 11:38| 来源: 网络整理| 查看: 265

04绘制矩形

在图像上绘制矩形和圆形还是比较简单的,直接调用opencv中的rectangle和circle函数,并给出适合的参数即可。

# 导入opencv库 import cv2 # 读取图片文件dehua.jpg(文件名不能有中文),存入img img = cv2.imread("./images/dehua.jpg") # 坐标,(x,y)矩形左上角坐标,(w,h)矩形的宽和高 x,y,w,h=100,100,100,100 # 在图像img上绘制矩形,左上角坐标(x,y),矩形的宽和高w,h,红色外框(BGR),粗细为2 cv2.rectangle(img,(x,y,w,h),color=(0,0,255),thickness=2) # 在图像img上绘制圆形,圆心为坐标(x+int(w/2),y+int(h/2)),半径为50,蓝色外框(BGR),粗细为2 cv2.circle(img,center=(x+int(w/2),y+int(h/2)),radius=50,color=(255,0,0),thickness=2) #显示图像img cv2.imshow("img",img) while True: # 如果按下小写字母键"q",则结束循环,执行最候一句语句cv2.destroyAllWindows() if cv2.waitKey() == ord("q"): # 否则一直循环,即等待 break cv2.destroyAllWindows() # 释放内存

对应高中生来说,比较难理解的还是

while True: # 如果按下小写字母键"q",则结束循环,执行最候一句语句cv2.destroyAllWindows() if cv2.waitKey() == ord("q"): # 否则一直循环,即等待 break cv2.destroyAllWindows() # 释放内存

下面我用流程图来解释,需要对同学们理解有所帮助。 在这里插入图片描述

05人脸检测

用opencv进行人脸检测,一般的过程如下: 在这里插入图片描述 其中“将图像转换为灰度图像”、“调用人脸模型”、“获取人脸ROI”、“根据ROI进行标记”、“输出标记后的图像”这些步骤写到了函数def face_detect_demo(img)中,参数img就是读入的图像文件。

具体的代码如下:

import cv2 #自定义函数,人脸检测,参数img def face_detect_demo(img): # 转换成灰度图像 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 设置人脸分类器(即用opencv内置的人脸检测模型) face_detect=cv2.CascadeClassifier("./venv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml") # 调用人脸检测函数(参数详解见最后),得到的人脸数据存放于faces中(faces是numpy.ndarray) faces=face_detect.detectMultiScale(gray,1.1,5,0,(20,20),(100,100)) # 在每一张人脸上画框 for x,y,w,h in faces: cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2) # 显示画框后的图像 cv2.imshow("result",img) img = cv2.imread("./images/DSC04753.jpg") face_detect_demo(img) # 调用自定义人脸检测函数,参数是读取的图像img while True: # 如果按下小写字母键"q",则结束循环,执行最候一句语句cv2.destroyAllWindows() if cv2.waitKey() == ord("q"): # 否则一直循环,即等待 break cv2.destroyAllWindows() # 释放内存

说明1:haarcascade_frontalface_default.xml是opencv中内置的人脸检测模型文件(即,opencv已经将人脸的特征交于计算机进行了学习,生成了一个通用性很强的人脸检测模型文件,无特殊要求的情况下可直接使用)。此文件一般位于cv2安装的目录下,大家可以自行寻找一下。

说明2:face_detect.detectMultiScale(gray,1.1,5,0,(20,20),(100,100))人脸检测函数参数说明。

detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize)

参数说明image用opencv读取的图片(必须为灰度图像)scaleFactor每一个图像尺度中的尺度参数,默认值为1.1minNeighbors构成检测目标(人脸)的相邻矩形的最小个数,默认值3个flags略,默认值取0,(一般用不到,有兴趣可以自行查阅相关资料)minSize最小人脸尺寸maxSize最大人脸尺寸

说明3:faces=face_detect.detectMultiScale(gray,1.1,5,0,(20,20),(100,100))返回图像中检测得到多人人脸信息,存于faces,其数据类型为numpy.ndarray(numpy中的多维数组)。

返回的多维数组faces中x,y,w,h为其中的四个一维数组(可能这样描述不准确),存储每张人脸的左上角坐标、宽度和高度,因此可以使用for语句+rectangle函数来画框标记,代码如下:

for x,y,w,h in faces: cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)

rectangle函数的参数比较简单,这里就不用详细的介绍了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3