一、分类器选择
在opencv文件路径下,有着4个haar特征训练的级联分类器,借用官方文档的说明来简单解释下互相之间的区别
haarcascade_frontalface_alt.xml:
Stump-based 20x20 gentle adaboost frontal face detector.
haarcascade_frontalface_alt_tree.xml:
Stump-based 20x20 gentle adaboost frontal face detector. This detector uses tree of stage classifiers instead of a cascade(该检测器使用阶段分类器树而不是级联)
haarcascade_frontalface_alt2.xml:
Tree-based 20x20 gentle adaboost frontal face detector.
haarcascade_frontalface_default.xml:
Stump-based 24x24 discrete(?) adaboost frontal face detector.
对于分类器的选择,可以简单的写一下代码,输入目标类图像,通过更改分类器地址,来简单选择需要的分类器。
import cv2
def face_catch():
gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
#选择对应的分类器
face_detect = cv2.CascadeClassifier(r"E:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_alt2.xml")
#使用分类器
face = face_detect.detectMultiScale(gray)
#绘制矩形框来显示检测到的人脸,使用红色,线条粗细2像素
for x,y,w,h in face:
cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
cv2.imshow('result',img)
cv2.waitKey(0)
cv2.destroyWindow('result')
img = cv2.imread(r"C:\Users\yuehen\Desktop\face_catch.jpg")
face_catch()
haarcascade_frontalface_alt:
haarcascade_frontalface_alt_tree:
haarcascade_frontalface_alt2:
haarcascade_frontalface_default:
笔者这里选择最接近实际的haarcascade_frontalface_alt2分类器。
二、分类器参数设定
我们主要使用detectMultiScale函数调用分类器,具体参数如下:
face = face_detect.detectMultiScale(image,object,scaleFactor,minNeighbors,flags,minSize,maxSize)
'''
image:输入的待检测图像。
objects:检测到的目标的矩形框位置和尺寸。
scaleFactor:每次缩放图像的比例尺。
minNeighbors:表示每个候选矩形框应该保留的最少邻居个数,用于过滤掉过多的重叠矩形框。
flags:用于标记特定检测器的附加功能。
minSize:目标最小尺寸。
maxSize:目标最大尺寸。
'''
譬如:
face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
'''
gray:图像对象
scaleFactor=1.1:缩放1.1倍
minNeighbors=5:至少有5次重叠检测,我们才认为人脸确实存在
minSize=(30, 30):低于30*30的不作为人脸对象
'''
我们可以通过参数的调整来优化筛选效果,但是这些参数调整只会提高某一张特定图片的成像质量,所以我们一般不会通过调整参数来提高成像质量(除非是用于大批量高重叠特性的图片筛选),而是根据后期训练自己的分类器来提高特定需求的成像质量