【AdaBoost算法】基于OpenCV实现人脸检测Demo

简介:

一、关于检测算法

分类器训练:

通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测;

检测过程:

检测过程很简单,可以通过两种方式进行检测:

1、缩放图像:根据要检测的人脸尺寸范围对原图进行缩放,然后利用窗口(训练时正样本的尺寸),逐个遍历该尺寸下图像的所有潜在人脸位置,与分类器匹配,若通过每一级强分类器,则为人脸,若不能通过任何一级强分类器,则被判定不是人脸;

2、缩放特征:与缩放图像类似,不同的是缩放图像方式遍历的窗口是固定大小的(与正样本大小有关),图像在缩放,而缩放特征是图像不变,特征窗口在缩放;

不同点:缩放特征,积分图只需计算一次,不需要频繁缩放图像;

二、基于的OpenCV的检测Demo

先利用OpenCV的接口调用一下检测算法,测试一下,后续考虑移植其源代码为C语言版本,个人觉得C语言版本的算法较易理解,易于阅读;

复制代码
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/objdetect/objdetect.hpp>

using namespace cv;

int main(int argc, char** argv)
{

    CascadeClassifier stFaceCascade;
    IplImage *pstImage = NULL;
    std::vector<Rect> faceRects;

    if( !stFaceCascade.load("D:\\ProgramFiles\\develop\\opencv2.4.8\\sources\\data\\lbpcascades\\lbpcascade_frontalface.xml") )
    { 
        printf("Loading cascade error\n"); 
        return -1; 
    }
    
    pstImage = cvLoadImage("D:\\test.jpg", CV_LOAD_IMAGE_COLOR);

    stFaceCascade.detectMultiScale(pstImage, 
        faceRects,            //检出结果
        1.1,                  //缩放步长
        2,                    //框融合时的最小检出个数
        0|CV_HAAR_SCALE_IMAGE,//标志 |CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_DO_ROUGH_SEARCH|CV_HAAR_DO_CANNY_PRUNING
        Size(30, 30),         //最小人脸尺寸
        Size(300, 300) );     //最大人脸尺寸
    printf("Face Num[%d]\n", faceRects.size());

    for( unsigned int j = 0; j < faceRects.size(); j++ )
    {
        cvRectangle(pstImage, 
            cvPoint(faceRects[j].x, faceRects[j].y), 
            cvPoint(faceRects[j].x + faceRects[j].width, faceRects[j].y + faceRects[j].height),
            cvScalar(0,255,0),
            2,8,0);
    }
    cvShowImage("FDWin", pstImage);
    cvWaitKey(0);


    cvReleaseImage(&pstImage);
    return 0;
}
复制代码

三、检测结果



 本文转自风一样的码农博客园博客,原文链接:http://www.cnblogs.com/chenpi/p/5128232.html,如需转载请自行联系原作者

相关文章
|
4月前
|
算法 IDE 开发工具
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
|
4月前
|
机器学习/深度学习 算法 前端开发
【数据挖掘】袋装、AdaBoost、随机森林算法的讲解及分类实战(超详细 附源码)
【数据挖掘】袋装、AdaBoost、随机森林算法的讲解及分类实战(超详细 附源码)
38 0
|
6月前
|
算法 C++
OpenCV-白平衡(完美反射算法)
OpenCV-白平衡(完美反射算法)
166 0
|
6天前
|
机器学习/深度学习 算法 数据可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
12 0
|
4月前
|
XML 算法 计算机视觉
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
101 1
|
1月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
|
1月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
|
1月前
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
178 0
|
4月前
|
算法 数据挖掘 计算机视觉
OpenCV中应用尺度不变特征变换SIFT算法讲解及实战(附源码)
OpenCV中应用尺度不变特征变换SIFT算法讲解及实战(附源码)
32 0
|
4月前
|
算法 计算机视觉
OpenCV4-图像分割-watershed(分水岭算法)
1.分水岭概念 分水岭法是根据像素灰度值之间的差值寻找相同区域以实现分割的算法。我们可以将灰度值理解成像素的高度,这样一张图像可以看成崎岖不平的地面或者山区。向地面低洼的地方倾倒一定量的水,水将会掩盖低于某个高度的区域。
73 0