基于Qt的OpenCV人脸识别(三)

上篇完成了Qt调用OpenCV的摄像头,接下来要做的是基于拍摄到的图片进行人脸检测。使用OpenCV的级联检测器HAAR人脸检测,首先在Qt的初始化函数中加载人脸模型:

//初始化
void Widget::Init()
{
    //加载人脸检测模型
    if(!faceDetector.load("../facerecog2/haarcascade_frontalface_alt.xml"))
    {
        qDebug() << "--(!)Error loading";
        return;
    }
}

人脸模型位于编译的链接库中,路径为D:\Program\opencv3.2\newbuild\install\etc\haarcascades\haarcascade_frontalface_alt.xml,依然在打开摄像头槽函数中添加代码,代码参考了官方的人脸检测代码:

//打开摄像头
void Widget::on_btn_open_clicked()
{
    //打开摄像头
    if (capture.isOpened())
           return;
    capture.open(0);
    if(capture.isOpened())
    {
        for(;;)
        {
            capture >> frame;
            flip(frame, frame, 1);  //画面翻转
            if (!frame.empty())
            {
                
                //人脸检测
                Mat frame_gray;
                Mat dst;
                Mat testSample;
                cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
                equalizeHist(frame_gray, frame_gray);
                faceDetector.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
                for (int i = 0; i < faces.size(); i++)
                {
                    rectangle(frame, faces[i], Scalar(0, 0, 255), 1, 8, 0);
                }
                //显示
                image = Mat2QImage(frame);
                ui->label->setPixmap(QPixmap::fromImage(image));
            }
            Sleep(10); //延时10ms
    }
}

效果如下所示,很好的框出了人脸:

基于Qt的OpenCV人脸识别(三)_第1张图片

 

你可能感兴趣的:(图像处理)