基於Qt的OpenCV人臉識別(三)
阿新 • • 發佈:2018-12-31
上篇完成了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 } }
效果如下所示,很好的框出了人臉: