人脸检测+识别---04绘制矩形+05检测人脸(OpenCV+PyCharm适用于高中信息技术新教材)持续更新中……

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.1
minNeighbors构成检测目标(人脸)的相邻矩形的最小个数,默认值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函数的参数比较简单,这里就不用详细的介绍了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值