OpenCV使用級聯分類器找出視訊檔案中的人臉
阿新 • • 發佈:2022-04-09
一、概述
案例:使用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();
三、圖片演示