opencv结合MFC进行人脸检测

注:笔者使用的开发环境为VS2013+opencv2.4.10

调用于仕琪老师提供的人脸检测库库文件:
http://www.opencv.org.cn/forum.php?mod=viewthread&tid=34155&extra=page%3D1


1、在工程中导入facedetect-dll.h和CvvImage.h


2、在Dlg.cpp中添加
#pragma comment(lib,”libfacedetect.lib”)

在Dlg.h中添加
VideoCapture cap;
IplImage* m_frame;


3、添加将图像显示到picture控件的DrawToMFC函数
(可参考笔者的另一个教程:opencv结合MFC打开图片 )


4、添加检测人脸的定时器

void CFaceObjectDlg::OnTimer(UINT_PTR nIDEvent)
{
switch (nIDEvent)
{
case 1:
{
    Mat image;
    cap >> image;
    Mat gray;
    cvtColor(image, gray, CV_BGR2GRAY);
    int * pResults = NULL;
    //pBuffer是用于检测功能.
    //如果在多个线程中调用函数,请为每个线程创建一个缓冲区!
    unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
    int doLandmark = 1;
        // 正面人脸检测
        //检测人脸的速度快,但不能检测侧视图面
        //输入图像必须是灰色的(单通道)
        pResults = facedetect_frontal(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step,
            1.2f, 2, 48, 0, doLandmark);
        Mat result_frontal = image.clone();
        //输出检测结果
        for (int i = 0; i < (pResults ? *pResults : 0); i++)
        {
            short * p = ((short*)(pResults + 1)) + 142 * i;
            int x = p[0];
            int y = p[1];
            int w = p[2];
            int h = p[3];
            int neighbors = p[4];
            int angle = p[5];
            rectangle(result_frontal, Rect(x, y, w, h), Scalar(0, 255, 0), 2);
        }
        //将Mat转换为Iplimage用于显示
        m_frame = &result_frontal.operator IplImage();
        DrawToMFC(IDC_PIC,m_frame);
        //释放缓存
        free(pBuffer);
}break;
default:
    break;
}
CDialogEx::OnTimer(nIDEvent);
}

5、打开摄像头进行人脸检测

void CFaceObjectDlg::OnBnClickedFaceObject()
{
    cap.open(0);
    SetTimer(1,20,NULL);
}

6、关闭摄像头停止人脸检测

void CFaceObjectDlg::OnBnClickedStopObject()
{
    KillTimer(1);
    cap.release();
}

检测结果:

这里写图片描述

哈哈哈,笔者不露脸啦,就用计算机视觉里的一副插图来检测^_^


源码下载:http://download.csdn.net/detail/lwqbrell/9826816

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个计算机视觉库,可以用来处理图像和视频。它提供了许多用于图像处理和计算机视觉任务的函数和工具。在提供的引用中,代码展示了如何使用OpenCV库来进行摄像头人脸检测。 首先,代码使用`cv2.VideoCapture(0)`打开本机的摄像头,然后通过循环读取每一帧图像。接下来,将图像转换为灰度图像,这有助于人脸检测算法的准确性。然后,通过调用`cv2.CascadeClassifier('haarcascade_frontalface_default.xml')`加载人脸识别文件。接着,使用`face_cascade.detectMultiScale()`函数检测图像中的人脸,并将检测到的人脸用矩形框标记出来。 在人脸检测后,代码使用`frame[y:y+h, x:x+w`来提取人脸区域。然后将人脸打码,这里的打码是通过缩小原始人脸图像的尺寸,然后将其重复放大以覆盖原始人脸区域。最后,使用`cv2.imshow()`显示图像,并使用`cv2.waitKey()`等待用户按下键盘上的 'q' 键退出程序。 总结来说,这段代码是通过OpenCV库实现了从摄像头实时采集图像,并进行人脸检测和打码的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [opencv MFC 摄像头 人脸识别](https://download.csdn.net/download/mygudou/5004145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [小实验:python+opencv实现摄像头人脸识别、人脸马赛克](https://blog.csdn.net/aiyaya333/article/details/124399175)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值