函数介绍
CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器,现在有两种选择:一是使用老版本的CvHaarClassifierCascade函数,一是使用新版本的CascadeClassifier类。
老版本的分类器只支持类Haar特征,而新版本的分类器既可以使用Haar,也可以使用LBP特征。
例程应用
import cv2
# 创建级联分类器
classifier_eye = cv2.CascadeClassifier('haarcascade_eye.xml')
# 载入图像
img_eye = cv2.imread('0_0.jpg')
# 利用分类器进行检测
eyeRects = classifier_eye.detectMultiScale(img_eye, 1.2, 2, cv2.CASCADE_DO_CANNY_PRUNING, (20, 20))
# 检测结果
if len(eyeRects) > 0:
counter = 0
for eyeRect in eyeRects:
counter += 1
x, y, w, h = eyeRect
cv2.rectangle(img_eye, (int(x), int(y)), (int(x + w), int(y + h)), (0, 255, 0), 2, 8)
cv2.imshow('eye', img_eye)
cv2.waitKey()
原图
检测结果
检测子函数detectMultiScale()
介绍
void detectMultiScale(
const Mat& image, //待检测图像
CV_OUT vector<Rect>& objects, //被检测物体的矩形框向量
double scaleFactor = 1.1, //前后两次相继的扫描中搜索窗口的比例系数,默认为1.1 即每次搜索窗口扩大10%
int minNeighbors = 3, //构成检测目标的相邻矩形的最小个数 如果组成检测目标的小矩形的个数和小于minneighbors - 1 都会被排除
//如果minneighbors为0 则函数不做任何操作就返回所有被检候选矩形框
int flags = 0, //若设置为CV_HAAR_DO_CANNY_PRUNING 函数将会使用Canny边缘检测来排除边缘过多或过少的区域
Size minSize = Size(),
Size maxSize = Size() //最后两个参数用来限制得到的目标区域的范围
);
对于flags
,有以下取值:
CV_HAAR_DO_CANNY_PRUNING
:利用Canny边缘检测器来排除一些边缘很少或者很多的图像区域;
CV_HAAR_SCALE_IMAGE
:按比例正常检测;
CV_HAAR_FIND_BIGGEST_OBJECT
:只检测最大的物体;
CV_HAAR_DO_ROUGH_SEARCH
:只做初略检测。