本次我们要下图中的实现人脸检测~

惯例来看一下源代码:
import cv2 as cv
def face_detect_demo():
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier('M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
face = face_detect.detectMultiScale(gray)
for x,y,w,h in face:
cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
cv.imshow('result',img)
img = cv.imread('photo1.jpg')
face_detect_demo()
while True:
if ord('q') == cv.waitKey(0):
break
cv.destroyAllWindows()
(1)调用任务器路径
在我们解读代码之前,本次需要先加载一个opencv里的分类器。我的是直接已经预装了搜名字找到的。分类器搜“haarcascade_frontalface_alt2.xml”

具体的路径如图:


1.复制出来如下:M:\python\pythoninstall\Lib\site-packages\cv2\data
2.在此路径基础上,我们把文件名复制到路径后面。即:
M:\python\pythoninstall\Lib\site-packages\cv2\data\haarcascade_frontalface_alt2.xml
3.还要进一步操作把文件名中所有“\”改为“/”,改后为:
M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml
这里文件路径一定要对,如果报错了。先来检查路径名!!!
然后就可以开始本次的学习了~本次主要学习的有:
(2)定义和调用函数
#定义了一个名为 face_detect_demo (人脸检测)的函数
def face_detect_demo():
#调用之前定义的函数
face_detect_demo()
第一段代码:def 是 Python 里用于定义函数的关键字。face_detect_demo 是函数的名称,可以自定义。
第二段代码:调用之前定义的 face_detect_demo 函数,开始执行人脸检测操作。
(3)灰显图片
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
这个代码之前我们学过:建筑兔零基础自学python记录13|实战人脸识别项目——灰度转换02-CSDN博客
灰度图像在人脸检测中更常用,因为 Haar 级联分类器通常在灰度图像上进行操作,这样可以减少计算量。
(4)cv.CascadeClassifier()人脸识别分类器
face_detect = cv.CascadeClassifier('M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
cv.CascadeClassifier 是 OpenCV 库中的一个类,专门用于处理基于 Haar 级联分类器或 LBP级联分类器的对象检测任务。Haar 级联分类器是一种基于机器学习的目标检测方法,通过训练大量的正负样本,学习到目标对象(如人脸)的特征,从而实现对目标对象的检测。
(5)detectMultiScale()图像中检测对象
#输入的灰度图像中检测人脸
face = face_detect.detectMultiScale(gray)
detectMultiScale()主要用于在图像中检测对象(如人脸、眼睛等)。在输入图像中检测多个不同大小的对象,返回一个包含检测到的对象的矩形框信息的列表。每个矩形框由左上角坐标(x, y)以及宽度w和高度h表示,通常用于人脸、眼睛等物体的检测。
我们可以鼠标悬停相关命令,会展开命令中相关参数提示~

detectMultiScale()的参数主要包括:
detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, flags=0, minSize=(0, 0), maxSize=(0, 0))
image:- 必需参数,输入的待检测图像,通常是灰度图像。
scaleFactor:- 可选参数,默认值为 1.1。该参数表示在每个图像尺度上图像缩小的比例。例如,
scaleFactor = 1.1表示每次将图像缩小 10% 进行检测。较大的值会加快检测速度,但可能会遗漏一些对象;较小的值会增加检测时间,但可能会提高检测的准确性。
- 可选参数,默认值为 1.1。该参数表示在每个图像尺度上图像缩小的比例。例如,
minNeighbors:- 可选参数,默认值为 3。该参数表示每个候选矩形框应该保留的最小邻居数。这个参数用于控制误检测的情况,值越大,检测到的对象越可能是真实的对象,但可能会遗漏一些真实的对象;值越小,可能会检测到更多的对象,但误检测的可能性也会增加。
-
flags:可选参数,在较新的 OpenCV 版本中,这个参数的作用不大,通常保持默认值 0 即可。 minSize:- 可选参数,默认值为
(0, 0)。该参数指定检测对象的最小尺寸,如果检测到的对象小于这个尺寸,则会被忽略。
- 可选参数,默认值为
maxSize:- 可选参数,默认值为
(0, 0)。该参数指定检测对象的最大尺寸,如果检测到的对象大于这个尺寸,则会被忽略。
- 可选参数,默认值为
让我们尝试运用解读一下:
face = face_detect.detectMultiScale(gray,1.01, 5, 0, (100, 100), (300, 300))
检测gray这个图,scaleFactor图像缩小比例=1.01,minNeighbors误检测值=5,flags=0,检测对象的最小尺寸(100,100),检测对象的最大尺寸(300,300)
(6)循环检测
for x,y,w,h in face:
cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
- 使用
for循环遍历检测到的所有人脸矩形框。 cv.rectangle()是之前学过的建筑兔零基础自学python记录15|实战人脸识别项目——绘制矩形04(附:常见BGR值列表)-CSDN博客我们来解读一下:操作对象img,绘制矩形左上角(x,y)右下角(x+w,y+h),红色,边框线宽2
综上我们对整个代码进行解读:
import cv2 as cv
#定义人脸识别函数
def face_detect_demo():
#变为灰色图
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#调用人脸识别分类器
face_detect = cv.CascadeClassifier('M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
#输入的灰度图像中检测人脸
face = face_detect.detectMultiScale(gray)
#用左上角(x,y)右下角(x+w,y+h)的红色矩形框(线宽2)在图片中寻找人脸
for x,y,w,h in face:
cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
cv.imshow('result',img)
img = cv.imread('photo1.jpg')
#调用人脸识别函数
face_detect_demo()
while True:
if ord('q') == cv.waitKey(0):
break
cv.destroyAllWindows()
大家一起来尝试一下吧~
(7)总结
def定义函数
cv.CascadeClassifier()人脸识别分类器
图像中检测对象detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, flags=0, minSize=(0, 0), maxSize=(0, 0))
补充:部分分类器的内容

1475

被折叠的 条评论
为什么被折叠?



