最近在学校MFC和Opencv,毕业只是做面部识别软件,所以写一个,我觉得很简单。

第一个VC组态opencv。不用说。非常easy,网上资料非常多,然后就是设计界面啦,这个全然凭个人喜好了,我设计的界面是这种:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnNoaTE5OTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

然后就是拍照。保存图片。这个也非常easy,网上资料也非常多,就简单粘贴一下代码吧:

这是打开摄像头的代码:

pwnd = GetDlgItem(IDC_STATIC1);    

    pDC =pwnd->GetDC();  

    hDC= pDC->GetSafeHdc();  

    pwnd->GetClientRect(&rect);

if (!camera.OpenCamera(0,false))  

    {  

        AfxMessageBox("无法打开摄像头");  

        return;  

    }  

  

    //IplImage* m_Frame;  

    m_Frame=camera.QueryFrame();  

    CvvImage m_CvvImage;  

    m_CvvImage.CopyOf(m_Frame,1);     

    if (true)  

    {  

        m_CvvImage.DrawToHDC(hDC, &rect);  

        //cvWaitKey(10);  

    }  

    // 设置计时器,每10ms触发一次事件  

    SetTimer(1,10,NULL); 



}

关闭摄像头:

void CBishe5_1Dlg::OnButton3() 

{

// TODO: Add your control notification handler code here

camera.CloseCamera();

KillTimer(1);


}

保存图片并在第二的picture框中显示:

// TODO: Add your message handler code here and/or call default

pwnd = GetDlgItem(IDC_STATIC1);    

    pDC =pwnd->GetDC();  

    hDC= pDC->GetSafeHdc();  

    pwnd->GetClientRect(&rect);

m_Frame=camera.QueryFrame();

  

    CvvImage m_CvvImage;  

    m_CvvImage.CopyOf(m_Frame,1);     

    if (true)  

{  

        m_CvvImage.DrawToHDC(hDC, &rect); 

        //cvWaitKey(10);  

    }



CDialog::OnTimer(nIDEvent);

}


在摄像头拍摄图片中还遇到了问题,应该是兼容性的问题。我是在win7系统上执行VC和opencv1.0,当中opencv1.0中打开摄像头操作无法执行,后来搞了好长时间。找了一些资料,后来将打开摄像头等操作代码不调用opencv1.0的。自己写代码从win7的API调用,此段代码是一个大神写的。非常好用,十分感谢他的,代码非常长,就不粘贴了,网上细致找找都有。

接下来就是图像识别了,这个我感觉非常easy,我花了一下人脸识别的程序框图,帮助大家理解一下:

事实上程序非常easy,我就张贴一下我的找出人脸并圈出人脸的代码,其它鼻子嘴巴等五官识别都差点儿相同:

CvSeq* FaceDet(IplImage* imgSrc, IplImage* imgDst)

{

if(imgSrc != imgDst)

{

cvReleaseImage(&imgDst);

imgDst = cvCloneImage(imgSrc);

}





const char* cascade = "haarcascade_frontalface_alt2.xml";

CString file = getXMLFile(cascade);



CvSeq * faces = CvHarrEx(imgSrc, NULL, /*FACEXML*/file, cvSize(20, 20));





if(!faces)

{

MessageBox(NULL,"此人长得太帅!

!导致计算机无法识别。实在不好意思", "", 0);

return NULL;

}





//Reduce(faces);



int i, n = faces->total;

CvRect* r;





//--check whether have eyes in the face

for(i = 0; i < n; i++)

{

   r = (CvRect*)cvGetSeqElem( faces, i );



if( CvHarrEx(imgSrc, r, /*EYERXML*/getXMLFile("ojoD.xml"), cvSize(18, 12)) == NULL)

{

cvSeqRemove(faces, i);

i--;

n = faces->total;

}

}





DrawCircle(imgSrc, imgDst, faces, cvPoint(0,0));

return faces;

}

终于结果是将人脸五官全识别并圈出来:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbnNoaTE5OTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

详细就这些了,全程序我打包发在CSDN的下载中把,事实上还没搞完,原本想建,把家人的脸都训练成模板,建一个模型库,然后当外人出如今摄像头前,在模板库中找不到匹配的模板,然后报警。

嗯嗯,小弟刚開始学,比与水相比,。第一次写博客,很多关注大神。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

基于VC面部识别软件(识别出人脸特征)的更多相关文章

  1. java 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对

    java人脸识别 虹软ArcFace 2.0,java SDK使用.人脸识别-抽取人脸特征并做比对 虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.ht ...

  2. 人脸检测及识别python实现系列(2)——识别出人脸

    人脸检测及识别python实现系列(2)——识别出人脸 http://www.cnblogs.com/neo-T/p/6430583.html

  3. 03-人脸识别-基于MTCNN,显示5个人脸特征

    import tensorflow as tf import numpy as np import cv2 import detect_face import matplotlib.pyplot as ...

  4. 使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_126 OpenCV4.1已经发布将近一年了,其人脸识别速度和性能有了一定的提高,这里我们使用opencv来做一个实时活体面部识别的 ...

  5. 基于百度AI开放平台的人脸识别及语音合成

    基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...

  6. 万张PubFig人脸数据实现基于python+OpenCV的人脸特征定位程序(1)

    在最近刷今日头条以及其他媒体软件时,经常会发现一些AI换脸的视频,于是我想,可不可以自己实现一个可以进行人脸识别的软件程序.我的具体流程是先配合python网络爬虫先进行万张PubFig人脸公共图片的 ...

  7. vs2017 dlib19.3 opencv3.41 C++ 环境配置 人脸特征点识别

    身为一个.net程序员经过两天的采坑终于把人脸特征检测的项目跑通了,然后本文将以dlib项目中人脸特征检测工程为例,讲解dlib与opencv 在vs2017 C++ 项目中的编译与运行路径配置. 1 ...

  8. 自己编写的基于VC++6.0的串口调试软件,并贡献源程序!

    自己编写的基于VC++6.0的串口调试软件源程序! 程序下载链接: 点击打开链接

  9. 人脸检测及识别python实现系列(6)——终篇:从实时视频流识别出“我”

    人脸检测及识别python实现系列(6)——终篇:从实时视频流识别出“我” 终于到了最后一步,激动时刻就要来临了,先平复一下心情,把剩下的代码加上,首先是为Model类增加一个预测函数: #识别人脸 ...

随机推荐

  1. [RxJS] Use takeUntil instead of manually unsubscribing from Observables

    Manually unsubscribing from subscriptions is safe, but tedious and error-prone. This lesson will tea ...

  2. href=“file://” doesn't work

    Local Explorer 2016.6.21.0 CRX for Chrome or Chromium https://www.crx4chrome.com/extensions/eokekhgp ...

  3. 【23.39%】【codeforces 558C】Amr and Chemistry

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 使用Perl处理Excel之DMA映射

    使用Perl处理Excel之DMA映射 功能 通道处理,将各个通道的外设映射到通道上 外设ack信号处理 脚本执行情况 顶层Perl脚本(dma_parse.pl) 将上述两个功能脚本整合,便于调用 ...

  5. js进阶 11-7 jquery如何获取和改变元素的位置

    js进阶 11-7  jquery如何获取和改变元素的位置 一.总结 一句话总结:jquery中匿名函数中的index参数是什么意思.jquery对象多集合,故index为所选元素的下标. 1.jqu ...

  6. UTC时间与当地时间的转换关系?

    UTC时间与当地时间转换关系? 一.总结 1.UTC +时区差=本地时间 2.UTC是世界统一时间 二.UTC时间是什么 1.UTC时间 协调世界时,又称世界统一时间.世界标准时间.国际协调时间.由于 ...

  7. js如何实现动态克隆一个表格?

    js如何实现动态克隆一个表格? 一.总结 1.通过innerHTML实现表格内容复制, 2.通过表格dom的属性(比如border)实现属性赋值, 3.通过表格dom的样式style实现样式的复制. ...

  8. HDU 5044 Tree(树链剖分)

    HDU 5044 Tree field=problem&key=2014+ACM%2FICPC+Asia+Regional+Shanghai+Online&source=1&s ...

  9. HTML5在客户端存储数据的新方法——localStorage

    HTML5在客户端存储数据的新方法--localStorage localStorage作为HTML5本地存储web storage特性的API之一,主要作用是将数据保存在客户端中,而客户端一般是指上 ...

  10. Android学习Scroller(三)——控件平移划过屏幕 (Scroller简单使用)

    MainActivity例如以下: package cc.cn; import android.os.Bundle; import android.view.View; import android. ...