本篇主要介绍图像的人脸识别算法,示例程序如下:
#include <Windows.h>
#include <vector>
#include <iostream>
#include <string>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
//加载Haar特征检测分类器
CascadeClassifier cascade;
cascade.load("D:\\Program Files\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml");
// 载入图像
const string pstrImageName = "2.jpg";
Mat SrcImage = imread(pstrImageName, CV_LOAD_IMAGE_COLOR);
Mat GrayImage;
cvtColor(SrcImage, GrayImage, CV_BGR2GRAY); //转换为灰度图
//人脸识别与标记
if (cascade.empty())
cout << "未加载分类器" << endl; //判断分类器
CvScalar FaceCirclecolors[] =
{
{ { 0, 0, 255 } },
{ { 0, 128, 255 } },
{ { 0, 255, 255 } },
{ { 0, 255, 0 } },
{ { 255, 128, 0 } },
{ { 255, 255, 0 } },
{ { 255, 0, 0 } },
{ { 255, 0, 255 } }
}; //标记圆的颜色
vector<cv::Rect> faces;
DWORD dwTimeBegin, dwTimeEnd;
dwTimeBegin = GetTickCount();
// 识别
cascade.detectMultiScale(GrayImage, faces);
dwTimeEnd = GetTickCount();
cout << "人脸个数:" << faces.end() - faces.begin()
<< "识别用时:" << dwTimeEnd - dwTimeBegin << "ms\n";
// 标记
int n = 0;
for (vector<cv::Rect>::const_iterator i = faces.begin(); i <faces.end();