1. 程式人生 > 其它 >OpenCV使用級聯分類器找出視訊檔案中的人臉

OpenCV使用級聯分類器找出視訊檔案中的人臉

一、概述

  案例:使用OpenCV自帶的級聯分類器找出視訊中的人臉

  操作步驟:

    1.例項化VideoCapture

    2.使用其open方法開啟檔案

    3.檢測是否打開了檔案

    4.建立CascadeClassifier例項

    5.載入載入特徵資料

    6.迴圈讀取視訊檔案中的每一幀

    7.將讀取出來的視訊幀轉為灰度圖和直方圖均衡化

    8.使用detectMutilScale在不同的尺度空間找出人臉,並存入vector<Rect>中

    9.使用rectangle將找出的人臉繪製並顯示出來

    10.迴圈從第6步開始迴圈,直到視訊檔案讀取完成。

 

    ps:兩個重要的內容

      1.使用VideoCapture讀取視訊檔案的每一幀

      2.利用CascadeClassifier識別人臉

二、程式碼示例

 String filePath = "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml";
    CascadeClassifier face_classifier;
    if(!face_classifier.load(filePath)){

        qDebug()<<"Haar特徵資料檔案不能為空";
        
return; } VideoCapture videoCapture; videoCapture.open("/Users/yangwei/Downloads/1649470407696618.mp4"); if(!videoCapture.isOpened()){ qDebug()<<"打開了攝像頭"; return; } Mat frame,gray; while(videoCapture.read(frame)){ qDebug()<<"讀取視訊幀"; cvtColor(frame,gray,COLOR_BGR2GRAY); equalizeHist(gray,gray); vector
<Rect> faces; face_classifier.detectMultiScale(gray,faces,1.3,15,0,Size(30,30)); for(size_t i = 0;i<faces.size();i++){ rectangle(frame,faces[i],Scalar(0,0,255),3,LINE_8); } imshow("src",frame); waitKey(1000 / videoCapture.get(CAP_PROP_FPS)-10); } videoCapture.release();

 

三、圖片演示