opencv中haar检测器的使用

haar检测器是一个十分经典也十分古老的检测器,最成功的应用莫过于人脸检测,它的具体原理作者还不甚清楚,查阅相关博客发现讲的也不是很清楚,在这就不班门弄斧了。

下面讲讲如何使用已经训练好的haar分类器。

首先建立haar分类器对象,需要读取一个xml文件,这个文件也就是训练好的分类器。

face_haar = cv2.CascadeClassifier("data/haarcascades/haarcascade_frontalface_default.xml")

然后利用该分类器检测目标图像(灰度图)

faces = face_haar.detectMultiScale(gray_img,1.3,5)

其中1.3和5都是自己设定的参数,具体作用还请查阅官方文档。

得到的faces是一个列表,列表中元素为检测到的脸部矩形框,至此,脸部检测就完成了,十分简洁。

下面是完整代码(以一张图像为例)

# 加载分类器

face_haar = cv2.CascadeClassifier("data/haarcascades/haarcascade_frontalface_default.xml")

# 把图像转为黑白图像

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 检测图像中的所有脸

faces = face_haar.detectMultiScale(gray_img,1.3,5)

for face_x,face_y,face_w,face_h in faces:

    cv2.rectangle(img, (face_x, face_y), (face_x+face_w, face_y+face_h), (0,255,0),2)

除了,针对脸部的分类器,还有眼睛,鼻子,嘴等已经训练好的分类器,只需加载相应的xml文件即可,这些可以在opencv自带的包中找到,也可以去github上下载opencv_contrib/modules/face/data/cascades at master · opencv/opencv_contrib · GitHub,不过作者目前用嘴部和眼睛检测器时发现检测结果不很理想,脸部还不错。

你可能感兴趣的:(opencv中haar检测器的使用)