資源簡介
人臉識別主要有三個步驟:
人臉圖像采集及檢測
人臉圖像預處理
人臉圖像特征提取以及匹配與識別
以下代碼實現了讀取本地圖像,進行人臉檢測
代碼片段和文件信息
#include?
#include?“stdafx.h“
#include?
#include?
using?namespace?std;
using?namespace?cv;
int?main()
{
Mat?image?image_gray;???????//定義兩個Mat變量,用于存儲每一幀的圖像
image?=?imread(“../test.jpg“);
imshow(“原圖“?image);
//waitKey(0);
cvtColor(image?image_gray?CV_BGR2GRAY);???//轉為灰度圖
equalizeHist(image_gray?image_gray);???????//直發圖均化,增強對比度方便處理
CascadeClassifier?eye_Classifier;????????????//載入分類器
CascadeClassifier?face_cascade;??????????????//載入分類器
//加載分類訓練器,OpenCV官方文檔的xml文檔,可以直接調用
//我的xml的路徑D:\OpenCV\opencv\build\etc\haarcascades??
if?(!eye_Classifier.load(“./haarcascade_eye.xml“))????//把xml文檔復制到了當前項目的路徑下
{
cout?<“導入haarcascade_eye.xml時出錯?!“?< return?0;
}
if?(!face_cascade.load(“./haarcascade_frontalface_alt.xml“))????//把xml文檔復制到了當前項目的路徑下
{
cout?<“導入haarcascade_frontalface_alt.xml時出錯?!“?< return?0;
}
//vector?是個類模板?需要提供明確的模板實參??vector則是個確定的類?模板的實例化
vector?eyeRect;
vector?faceRect;
//檢測眼睛的位置
eye_Classifier.detectMultiScale(image_grayeyeRect1.120?|?CV_HAAR_SCALE_IMAGESize(3030));
for?(size_t?eyeIdx?=?0;eyeIdx? {
rectangle(image?eyeRect[eyeIdx]?Scalar(0?0?255));????//用矩形畫出檢測到的眼睛的位置
}
/*
CV_WRAP?virtual?void?detectMultiScale(
???const?Mat&?image??
???????????????????????????????????CV_OUT?vector&?objects??
???????????????????????????????????double?scaleFactor=1.1??
???????????????????????????????????int?minNeighbors=3?int?flags=0??
???????????????????????????????????Size?minSize=Size()??
???????????????????????????????????Size?maxSize=Size()?
???);??
各參數含義:
const?Mat&?image:?需要被檢測的圖像(灰度圖)
vector&?objects:?保存被檢測出的人臉位置坐標序列
double?scaleFactor:?每次圖片縮放的比例
int?minNeighbors:?每一個人臉至少要檢測到多少次才算是真的人臉
int?flags:?決定是縮放分類器來檢測,還是縮放圖像
Size():?表示人臉的最大最小尺寸
*/
//檢測關于臉部的位置
face_cascade.detectMultiScale(image_gray?faceRect?1.1?2?0?|?CV_HAAR_SCALE_IMAGE?Size(30?30));
for?(size_t?i?=?0;?i? {
rectangle(image?faceRect[i]?Scalar(0?0?255));???????????//用矩形畫出檢測到臉部的位置
}
imshow(“人臉識別“image);?????????//顯示當前
waitKey(0);
return?0;
}
評論
共有 條評論