CascadeClassifier--级联分类器

函数介绍

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:只做初略检测。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值