目錄
一、步驟
1.1.創建級聯分類器
1.2.載入訓練模型
1.3.檔案判空檢查
1.4.創建人臉存放的vector
1.5.使用detectMultiScale函式
1.5.1 函式引數詳解
1.6.在原圖中畫出人臉矩形邊框
二、效果
三、代碼
一、步驟
1.1.創建級聯分類器
//創建級聯分類器
CascadeClassifier faceCascade;
1.2.載入訓練模型
//載入訓練模型
faceCascade.load("Resources/haarcascade_frontalface_default.xml");
1.3.檔案判空檢查
//檔案判空檢查
if (faceCascade.empty())
{
cout << "XML file not loaded" << endl;
}
1.4.創建人臉存放的vector
//創建人臉存放的矩形向量
vector<Rect> faces;
1.5.使用detectMultiScale函式
//使用人臉級聯點檢測多尺度方法
faceCascade.detectMultiScale(img, faces, 1.1, 10);
opencv2中人臉檢測使用的是 detectMultiScale函式,它可以檢測出圖片中所有的人臉,并將人臉用vector保存各個人臉的坐標、大小(用矩形表示)
1.5.1 函式引數詳解
void detectMultiScale(
const Mat& image,
CV_OUT vector<Rect>& objects,
double scaleFactor = 1.1,
int minNeighbors = 3,
int flags = 0,
Size minSize = Size(),
Size maxSize = Size()
);
引數含義:
引數1:image--待檢測圖片,一般為灰度影像加快檢測速度;
引數2:objects--被檢測物體的矩形框向量組;
引數3:scaleFactor--表示在前后兩次相繼的掃描中,搜索視窗的比例系數,默認為1.1即每次搜索視窗依次擴大10%;
引數4:minNeighbors--表示構成檢測目標的相鄰矩形的最小個數(默認為3個),
如果組成檢測目標的小矩形的個數和小于 min_neighbors - 1 都會被排除,
如果min_neighbors 為 0, 則函式不做任何操作就回傳所有的被檢候選矩形框,
這種設定值一般用在用戶自定義對檢測結果的組合程式上;
引數5:flags--要么使用默認值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果設定為CV_HAAR_DO_CANNY_PRUNING,那么函式將會使用Canny邊緣檢測來排除邊緣過多或過少的區域,
因此這些區域通常不會是人臉所在區域;
引數6、7:minSize和maxSize用來限制得到的目標區域的范圍,
1.6.在原圖中畫出人臉矩形邊框
//列印出臉
for (int i = 0; i < faces.size(); i++)
{
//繪制矩形邊框
//tl:top left
//br:bottom right
rectangle(img, faces[i].tl(),faces[i].br(), Scalar(255, 0, 255), 3);
}
二、效果

三、代碼
#include <opencv2/opencv.hpp>
#include <opencv2/objdetect.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
//定義圖片路徑
string path = "Resources/test.png";
//使用Mat物件來存盤
Mat img = imread(path);
//創建級聯分類器
CascadeClassifier faceCascade;
//載入訓練模型
faceCascade.load("Resources/haarcascade_frontalface_default.xml");
//檔案判空檢查
if (faceCascade.empty())
{
cout << "XML file not loaded" << endl;
}
//創建人臉存放的矩形向量
vector<Rect> faces;
//使用人臉級聯點檢測多尺度方法
faceCascade.detectMultiScale(img, faces, 1.1,10);
//列印出臉
for (int i = 0; i < faces.size(); i++)
{
//繪制矩形邊框
//tl:top left
//br:bottom right
rectangle(img, faces[i].tl(),faces[i].br(), Scalar(255, 0, 255), 3);
}
imshow("Image", img);
waitKey(0);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282554.html
標籤:AI
