最近在学校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. [Node.js] Provide req.locals data though middleware

    We can create Template Helpers, which can contains some common reuseable data and libs. /* This is a ...

  2. 经验总结56--mybatis返回主键

    使用mybatis框架时,有时候须要新插入的数据的主键是多少. 1.oracle 因为oracle是建的序列文件,获取ID值. <insert id="insert" par ...

  3. Win7的ftp功能

    ftp作为文件传输协议,在一些特殊情况下用这种文件传输是比较方便的,并且win7本身也支持这个功能,在控制面板--->程序-->打开或关闭Windows功能,安装即可: 然后在管理控制台中 ...

  4. C++学习笔记8-操作符&amp;指针

    1.  重载操作符 赋值操作符的返回类型应该与内置类型赋值运算返回的类型同样.内置类型的赋值运算返回对右操作数的引用,因此,赋值操作符也返回对同一类类型的引用.比如.Sales_item的赋值操作符能 ...

  5. jquery修改获取radio的选中项

    <input id="txtBeginDate" onclick="$('#divDate').css({'top':$('#txtBeginDate').offs ...

  6. 新版itunes添加铃声

    iTunes 铃声制作-图文教程 ① 点选设备iPhone - 勾选手动管理音乐和视频 - 点击应用 注意:因本操作涉及iPhone内音乐和视频,请操作前先对音乐和视频进行相关备份,以免同步后被刷掉造 ...

  7. 【35.43%】【hdu 4347】The Closest M Points

    Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others) Total Submissio ...

  8. 【34.25%】【BZOJ 2648】SJY摆棋子

    Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 2718  Solved: 931 [Submit][Status][Discuss] Descrip ...

  9. redisson

    http://www.tuicool.com/articles/BjyeaeQ http://blog.csdn.net/csujiangyu/article/details/51005342

  10. [Angular] Pluck value from Observable

    export class MailFolderComponent implements OnInit{ title: Observable<string>; messages: Obser ...