1. 程式人生 > >基於Qt的OpenCV人臉識別(三)

基於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
    }
}

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