【Python+OpenCV⼈脸检测—CascadeClassifier级联分类器实现】Python+OpenCV ⼈脸检测—CascadeClassifier 级联分类器实现
⼀、CascadeClassifier—级联分类器
级联分类器:CascadeClassifier就是opencv下objdetect模块中⽤来做⽬标检测的级联分类器的⼀个类,它可以帮助我们检测例如车牌、眼睛、⼈脸等物体。它的⼤概原理就是判别某个物体是否属于某个分类。以⼈脸为例,我们可以把眼睛、⿐⼦、眉⽑、嘴巴等属性定义成⼀个分类器,如果检测到⼀个模型符合定义⼈脸的所有属性,那么就认为它是⼀个⼈脸。接下来我们就逐步实现。
1、导⼊分类器⽂件
我们这次实现的⼈脸识别功能,需要先导⼊⼀个后缀名为.xml的分类器⽂件,它是前⼈已经创建好的分类器,我们可以直接使⽤
代码如下
faceCascade = cv2.CascadeClassifier("XML/haarcascade_l")
2、读⼊图⽚
img1 = cv2.imread('Photos/MHT.png')
rectangle函数opencv3、转为灰度图
imgGray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
4、调⽤detectMultiScale()函数进⾏检测
face1 = faceCascade.detectMultiScale(imgGray1,1.1,4)
detectMultiScale(image, scaleFactor, minNeighbors);
对参数我的理解是:
image:待处理的图像
scaleFactor:检测框的最⼩尺⼨
minNeighbors:相当于检测的阈值,过⼩会出现误检现象,即把⼀些其他元素误判成⼈脸,过⼤可能会检测不到⽬标
函数输出的是检测到⽬标图⽚中的每个⼈脸的x、y坐标值和宽度、⾼度。
5、绘制矩形框标记⼈脸
for(x, y, w, h)in face1:
6、输出图像
cv2.imshow("Result1", img1)
⼆、运⾏效果
我们先拿⼀张照⽚试⼀下
把⼈数增加成三个⼈:
四个⼈:
⼈数再多⼀点试试:
可以看到,⼤部分的⼈脸都被检测出来了。在⼈数很多的情况下,有⼀个没有被检测到,但在简单的场景下还是能基本完成要求的。下⾯附上完整代码:
import cv2
faceCascade = cv2.CascadeClassifier("XML/haarcascade_l")
img1 = cv2.imread('Photos/MHT.png')
img2 = cv2.imread('Photos/Three.png')
img3 = cv2.imread('Photos/BLACKPINK.jpg')
img4 = cv2.imread('Photos/101.png')
imgGray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
imgGray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
imgGray3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)
imgGray4 = cv2.cvtColor(img4, cv2.COLOR_BGR2GRAY)
face1 = faceCascade.detectMultiScale(imgGray1,1.1,4)
face2 = faceCascade.detectMultiScale(imgGray2,1.2,4)
face3 = faceCascade.detectMultiScale(imgGray3,1.3,5)
face4 = faceCascade.detectMultiScale(imgGray4,1.2,8)
# print(face1)
# print('***************************************************')
# print(face2)
# print('***************************************************')
# print(face3)
# print('***************************************************')
# print(face4)
for(x, y, w, h)in face1:
for(x, y, w, h)in face2:
for(x, y, w, h)in face3:
for(x, y, w, h)in face4:
cv2.imshow("Result1", img1)
cv2.imshow("Result2", img2)
cv2.imshow("Result3", img3)
cv2.imshow("Result4", img4)
cv2.waitKey(0)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。