使用OpenCV和MFC怎么实现一个人脸识别功能

  介绍

使用OpenCV和MFC怎么实现一个人脸识别功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强> 1设置控件

首先新建一个基于对话框的MFC程序的工程,工程名为FaceDetect;
然后在IDD_FACEDETECT_DIALOG对话框中添加一个图片控件,ID命名为:IDC_PICTURE;添加一个按钮控件,说明命名为“检测”,ID命名为IDC_START,将原来自动生成的的好按钮的标题改为“退”出;
删除原来的文本控件和“取消”控件。

<强> 2定义变量

在FaceDetectDlg。h开头添加以下几行代码

# pragma 一次   # include “opencv2/objdetect/objdetect.hpp"   # include “opencv2/highgui/highgui.hpp",   # include “opencv2/imgproc/imgproc.hpp”   using  namespace 性传播疾病;   using  namespace 简历;

然后在CFaceDetectDlg类定义一下几个变量

公众:   ,String  face_cascade_name;   ,String  eyes_cascade_name;   ,CascadeClassifier  face_cascade;   ,CascadeClassifier  eyes_cascade;   ,VideoCapture 捕获;

<强> 3对定义的变量初始化

CFaceDetectDlg:: CFaceDetectDlg (CWnd *, pParent /*=零*/)   ,:CDialogEx (CFaceDetectDlg:: IDD, pParent)   {=,,m_hIcon  AfxGetApp ()→LoadIcon (IDR_MAINFRAME);   ,string  face_cascade_name =,““   ,string  eyes_cascade_name =,““   } BOOL  CFaceDetectDlg: OnInitDialog ()   {   ,CDialogEx: OnInitDialog ();      ,//Add “关于…“,menu  item 用system 菜单。      ,//IDM_ABOUTBOX  must  be 拷贝,system  command 范围。   ,断言((IDM_ABOUTBOX ,, 0 xfff0),==, IDM_ABOUTBOX);   ,断言(IDM_ABOUTBOX  & lt;, 0 xf000);      ,CMenu * pSysMenu =, GetSystemMenu(假);   ,if  (pSysMenu  !=, NULL)   ,{   ,BOOL  bNameValid;   ,CString  strAboutMenu;=,,bNameValid  strAboutMenu.LoadString (IDS_ABOUTBOX);   ,断言(bNameValid);   (!,if  strAboutMenu.IsEmpty ())   ,{   ,pSysMenu→AppendMenu (MF_SEPARATOR);   ,pSysMenu→AppendMenu (MF_STRING, IDM_ABOUTBOX,, strAboutMenu);   ,}   ,}      ,//Set 从而icon  for 却;能够对话框只,framework  does 却;能够自动   ,//when 从而;应用# 39;s  main  window  is  not  a 对话框   ,SetIcon (m_hIcon,,真的),,//,Set  big 图标   ,SetIcon (m_hIcon,,假);,//,Set  small 图标      ,//TODO: Add  extra  initialization 这里   ,string  face_cascade_name =,“. . \ \调试\ \ haarcascade_frontalface_alt.xml";   ,string  eyes_cascade_name =,“. . \ \调试\ \ haarcascade_eye_tree_eyeglasses.xml";   ,如果(,! face_cascade.load (, face_cascade_name ),)   ,{   ,弹出窗口(_T (“haarcascade_frontalface_alt.xml  Error  loading")),,   ,return  1;   ,};      ,如果(,! eyes_cascade.load (, eyes_cascade_name ),)   ,{   ,弹出窗口(_T (“, haarcascade_eye_tree_eyeglasses.xmlError  loading"));   ,return  1;   ,};      ,return 真实;//,return  TRUE  unless 你set 从而focus 用a 控制   }

<强> 4检测函数的编写

思路是这样的:

1。首先打开摄像头
2,然后将摄像托获取的图像传递给人脸识别的函数
3。将识别后处理过的图像在图片控件中显示出来

双击IDD_FACEDETECT_DIALOG对话框上的上的“检测”按钮控件,进入控件函数编写的地方,该函数如下所示:

void  CFaceDetectDlg: OnBnClickedStart ()   {   ,//TODO: Add  your  control  notification  handler  code 这里   ,capture.open(0);//捕获外部摄像头,如果只有一个摄像头,就填0   ,Mat 框架;   ,namedWindow(“调整前,WINDOW_AUTOSIZE);      ,HWND  HWND =, (HWND) cvGetWindowHandle(“调整);   ,HWND  hParent =,:: GetParent (hWnd);      ,::SetParent (hWnd, GetDlgItem (IDC_PICTURE)→m_hWnd);   ,::显示窗口(hParent, SW_HIDE);//隐藏运行程序框,并且把它到MFC上“画”      ,if  (capture.isOpened ())   ,{   ,for ;;)//循环以达到视频的效果   ,{   capture 在祝辞大敌;框架;      (!,if  frame.empty ())   ,{   ,detectAndDisplay(帧);//识别的函数      ,imshow(“调整前,,框架);   ,UpdateData(假);   ,}   其他的,   ,{   ,//::AfxMessageBox (“,——(!), No  captured  frame ——,打破!“);      ,继续;   ,//休息;   ,}      ,waitKey (10);   ,}      ,}      }

使用OpenCV和MFC怎么实现一个人脸识别功能