OpenCV学习8-检测图片中是否有人脸

使用OpenCV的库函数可以很容易的检测出一张图片中是否有人脸,仅仅几行代码就可以实现。

检测原理:

1. 通过CascadeClassifier::load()调用已经训练好的haar+adaboost人脸检测模型,参数就是模型的文件路径。

PS:作为初学者自然是调用OpenCV自带的已经训练好的人脸检测模型。opencv提供了4种haar的人脸检测模型。

这里调用的是haarcascade_frontalface_alt.xml。从这里看出一个训练好的人脸检测模型是一个xml文件。

2.通过调用CascadeClassifier::detectMultiScale检测人脸的位置。


待解决的问题,以后解决这些问题后,在问题后面贴出博客地址。

但是作为初学者目前仍有下面几个问题待解决:

1.这个模型是怎么训练出来的

2.从图二可以看到检测出来的效果不是很好的,这个是模型的问题?还是程序的问题?该怎么改进?


代码如下:

    Mat image = imread("..\\..\\image\\Lena.png", IMREAD_GRAYSCALE);

    CascadeClassifier cascade;

    double time = (double)getTickCount();

    if (!cascade.load("../data/haarcascades/haarcascade_frontalface_alt.xml"))
    {
        printf("Cascade.load error\r\n");
    }
    vector<Rect> faces(0);
    cascade.detectMultiScale(image, faces, 1.1, 2, 0, Size(30, 30));

    if (faces.size() > 0)
    {
        for (size_t i = 0; i < faces.size(); i++)
        {
            rectangle(image, faces[i], Scalar(150, 0, 0), 3, 8, 0);
        }
    }
    else
    {
        printf("No Face\r\n");
    }
    time = (double)getTickCount() - time;

    printf("time used %f", time * 1000 / getTickFrequency());

    imshow("image", image);

效果如下

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值