python+OpenCV多人脸检测+代码解释

与前面人脸检测区别就是代码中换了xml文件,还有就是detectMultiScale()中的参数选择为默认。

上代码:

#导入cv模块
import cv2 as cv
#检测函数
def face_detect_demo():
    gary = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    face_detect = cv.CascadeClassifier('E:/Python/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
    face = face_detect.detectMultiScale(gary)
    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('face2.jpg')
#检测函数
face_detect_demo()
#等待
while True:
    if ord('q') == cv.waitKey(0):
        break
#释放内存
cv.destroyAllWindows()



 

这里的face = face_detect.detectMultiScale(gary)函数,()里的参数都是选择默认值。在一张图中参数的设置结果会导致人脸检测的误差,并不是所有的人脸都会被检测到,也有些不是人脸的的地方被检测成人脸,这段代码改参数调试几次后,发现选择默认的检测结果最好。

detectMultiScale()中各参数介绍:

参数1:image–待检测图片,一般为灰度图像加快检测速度;

参数2:objects–被检测物体的矩形框向量组;

参数3:scaleFactor–表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;

参数4:**minNeighbors–表示构成检测目标的相邻矩形的最小个数(默认为3个)。

如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上;

参数5:flags–要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为

CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域;

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

看完也是稀里糊涂的,这里举个栗子

face = face_detect.detectMultiScale(gary,1.01,5,0,(100,100),(300,300))

gray:表示图片

1.01:表示每次检测人脸扩大的倍数

5:表示连续检测5次都为人脸时候,才确定是人脸

0:一般都用默认值0,不用改

(100,100):表示检测人脸最小的人脸,低于100*100的人脸检测不出

(300,300):表示能检测到最大的人脸,高于300*300的人脸检测不出

如果这些参数都不写,就表示选择默认值。

大概就是这样,也是新手上路,有不对的地方请指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值