python人脸识别opencv_OpenCV for python --手把手教你做一个人脸识别小程序

这篇博客介绍了如何使用Python和OpenCV库实现静态图像中的人脸识别。通过加载预训练的XML文件进行人脸检测,将彩色图像转为灰度,然后应用detectMultiScale方法找到人脸,并在图像上画出矩形框。这是一个简单易懂的入门教程,适合初学者实践。
摘要由CSDN通过智能技术生成

计算机视觉相关的东西很久没有更新了,今天的专栏教大家快速实现一个静态图像人脸识别的脚本,很有意思,也很容易上手。我用的语言依旧是python,使用的库是OpenCV。

先来看一下做完的效果。

(1)脚本实现代码

import cv2

# the path of target image for face detection

imagePath = r"./image/RENLIAN.jpg"

facedetect = r"./cascades/haarcascade_frontalface_alt2.xml"

# Create the haarcascade

faceCascade = cv2.CascadeClassifier(facedetect)

# Read the image

image = cv2.imread(imagePath)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect faces in the image

faces = faceCascade.detectMultiScale(gray, 1.3,5)

# Draw a rectangle around the faces

for (x, y, w ,h) in faces:

img = cv2.rectangle(image, (x,y), (x+w, y+h), (0,255,0) , 2)

cv2.imshow("Faces found" ,image)

cv2.waitKey(0)

(2)代码讲解

facedetect = r"./cascades/haarcascade_frontalface_alt2.xml"

引入opencv自带的人脸识别的xml文件。在OpenCV中的源代码中会有一个文件夹叫做data/haarcascades, 该文件夹中包含了OpneCV中所有人脸识别的XML文件,这些文件可用于静止图像、视频和摄像头中所得到图像的人脸。

在开始做人脸识别的脚本前,把haarcascade中的xml文件拷贝到你想要项目中去,例如取一个文件名叫做cascade。

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

这是将彩色的人脸图片转换成灰度图像,因为人脸检测需要这样的色彩空间。

faces = faceCascade.detectMultiScale(gray, 1.3,5)

这是检测人脸,使用的方法是detectMultiScale,传递的参数是scaleFactor和minNeighbors,分别表示人脸检测过程中每次跌代时图像的压缩率及每个人矩形保留近邻数目的最小值。

这里详讲一下这个方法的参数,detectMultiScale有6个参数。

参数1:image--待检测图片,一般为灰度图像

参数2:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数也就是每次跌代时图像的压缩率。

参数3:minNeighbors--每个人矩形保留近邻数目的最小值。

参数4: flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为 CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域

参数5、6: minSize和maxSize用来限制得到的目标区域的范围。

for (x, y, w ,h) in faces:

img = cv2.rectangle(image, (x,y), (x+w, y+h), (0,255,0) , 2)

使用rectangle画图人脸的范围(矩形)。x, y为矩形的左上角,x+w,y+h为矩形的右下角,(0,255,0)表示颜色,2表示矩形框的粗细。

结束语:这期讲的是如何用OpenCV写一个简单的人脸识别脚本,大家可以照着代码敲出来,当你看到结果那一刻你会觉得其实这东西也没啥高深的嘛,入门了以后,你自己再去找资料做一个样本训练库,提高识别的精度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值