(3)在“FaceDetectionView.cpp”文件中添加以下灰底色部分程序代码:
// FaceDetectionView.cpp : CFaceDetectionView 类的实现
#include "stdafx.h"
#include "FaceDetection.h"
#include "FaceDetectionDoc.h"
#include "FaceDetectionView.h"
#include <string>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CFaceDetectionView
IMPLEMENT_DYNCREATE(CFaceDetectionView, CView)
BEGIN_MESSAGE_MAP(CFaceDetectionView, CView)
ON_COMMAND(ID_FaceDetected, &CFaceDetectionView::OnFacedetected)
END_MESSAGE_MAP()
// CFaceDetectionView 构造/析构
const char* cascade_name ="haarcascade_frontalface_alt.xml";//分类器的名称
// CFaceDetectionView 消息处理程序
void CFaceDetectionView::OnFacedetected() //人脸检测菜单响应事件
{
// TODO: 在此添加命令处理程序代码
CString fileName;
//打开文件对话窗口
CFileDialog OpenDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR, L"图像文件格式JPG file format (*.jpg)|*.jpg|(*.bmp) |*.bmp|", NULL);
//从文件对话窗口中打开图像
if(OpenDlg.DoModal()!=IDOK)
return;
//获得文件名
fileName = OpenDlg.GetPathName();
//必要的类型转换
std::string tempName = (LPCSTR)CStringA(fileName);
const char* tmp = tempName.c_str();
//打开文件,若失败则返回
if( (src = cvLoadImage(tmp, CV_LOAD_IMAGE_ANYCOLOR)) == 0 )
return;
//加载(分类器层叠)训练库
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
//加载不成功则显示错误讯息,并退出
if(cascade)
{
storage = cvCreateMemStorage(0);
cvNamedWindow( "人脸检测", CV_WINDOW_AUTOSIZE ); //创建窗口
//如果图片存在则分析并显示结果,否则退出程序
if(src) detect_and_draw(src); //调用人脸检与标示事件
cvReleaseImage(&src);
cvReleaseMemStorage( &storage );
}
else
{
|