人脸识别C++程序代码 - 副本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// AppDesignDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AppDesign.h"
#include "AppDesignDlg.h"
#include
#include
#include "Select.h"
#include "CvvImage.h"
#define MAX_POINT 200
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
using namespace std;
CvCapture * m_Video; // opencv库的指针,从视频获取图像
int nFrmNum=0; //定义第nFrmNum帧,初始化为0,自动增值,nFrmNum是帧控件的关联变量,帧控件的ID为IDC_FRAMNUM
////定义几个重要的全局变量
int nTrainFaces =0; // 训练图像的数目,即人脸库中有n张人脸
int nEigens =0; // 自己取的主要特征值数目(在提取特征脸的时候用到的参数)
IplImage** faceImgArr =0; // 指向训练人脸和测试人脸的指针(在学习和识别阶段指向不同)
CvMat* personNumTruthMat=0; // 人脸图像的ID号
IplImage* pAvgTrainImg =0; // 训练人脸数据的平均值
IplImage** eigenVectArr =0; // 投影矩阵,也即主特征向量
CvMat* eigenValMat =0; // 特征值
CvMat* projectedTrainFaceMat=0; // 训练图像的投影
CvMat* trainPersonNumMat=0;
/*以下是自定义函数的声明,具体定义会在下方,cv开头的是OPENCV自带的库函数*/ void learn();
int loadFaceImgArr(char *filename);
void recognize2(IplImage *img);
void doPCA();
void storeTrainingData();
int loadTrainingData(CvMat** pTrainPersonNumMat);
int findNearestNeighbor(float* projectedtestFace);
//用字符串时一定要把using namespace std;写在前面,否则不能用,下面是用于显示的字符串CvHaarClassifierCascade* cascade=NULL;
//OPENcv的分类器文件进行人脸检测,此函数是一个匹配函数,根据不同的分类器(tree、stump)进行不同的匹配,返回整形值,具体参考
/doc/6988305.html或
/p-192656933.html,是人脸检测中用到的一个很重要的函数
/*以下是MFC框架代码,在我们用鼠标进行搭建框架的时候自动生成*/
class CAboutDlg : public Cdialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAppDesignDlg dialog
CAppDesignDlg::CAppDesignDlg(CWnd* pParent /*=NULL*/) : CDialog(CAppDesignDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAppDesignDlg)
// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
pCapture = NULL;
m_totalfrm = 0;
m_curfrm = 0;
m_stop = false;
loadxml=false;
m_src = NULL;
m_times =0;
}
void CAppDesignDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAppDesignDlg)