介绍
使用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怎么实现一个人脸识别功能