`
touchmm
  • 浏览: 1037672 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

人脸检测的C/C++源代码

阅读更多

人脸检测的C/C++源代码,曾发表于 OPENCV 的 MAILING LIST,主要是对OPENCV 3.1 版本发布的代码做了一些速度上的优化,并且解决了内存泄漏的问题。这个程序所使用的 Paul Viola 提出(该论文“Rapid Object Detection using a Boosted Cascade of Simple Features”发表在 CVPR'01)的 Ada Boosted Cascade 算法可以说是目前最好最快的目标检测算法。

关于OPENCV的介绍,参考:

http://blog.csdn.net/hunnish/archive/2004/09/13/102535.aspx

关于该算法的详细介绍,也可参考:

http://www.merl.com/people/viola/research/publications/CVPR-2001.pdf

以及:

http://www.assuredigit.com/forum/display_topic_threads.asp?ForumID=11&TopicID=325

http://www.assuredigit.com/forum/display_topic_threads.asp?ForumID=11&TopicID=463

运行文件下载:

http://www.assuredigit.com/product_tech/Demo_Download_files/Face.exe

该程序可以对静止图像以及视频序列进行 face tracking。对视频序列,请先插入USB接口的摄像头。

====

在OPENCV 3.1 版本,VC6.0下编译通过

====

===
#ifdef _CH_
#define WIN32
#error "The file needs cvaux, which is not wrapped yet. Sorry"
#endif

#ifndef _EiC
#include "cv.h"
#include "cvaux.h"
#include "highgui.h"

#endif

#ifdef _EiC
#define WIN32
#endif

#define ORIG_WIN_SIZE 24
static CvMemStorage* storage = 0;
static CvHidHaarClassifierCascade* hid_cascade = 0;

#define WINNAME"Result"

void detect_and_draw( IplImage* image, IplImage* TempImage );

int main( int argc, char** argv )
{
CvCapture* capture = 0;

CvHaarClassifierCascade* cascade =
cvLoadHaarClassifierCascade( "<default_face_cascade>",<br> cvSize( ORIG_WIN_SIZE, ORIG_WIN_SIZE ));<br> hid_cascade = cvCreateHidHaarClassifierCascade( cascade, 0, 0, 0, 1 );<br> cvReleaseHaarClassifierCascade( &amp;cascade );</default_face_cascade>

cvNamedWindow( WINNAME, 1 );
storage = cvCreateMemStorage(0);

if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );
else if( argc == 2 )
capture = cvCaptureFromAVI( argv[1] );

if( capture )
{
IplImage *frame, *temp;
cvGrabFrame( capture );
frame = cvRetrieveFrame( capture );

temp = cvCreateImage( cvSize(frame->width/2,frame->height/2), 8, 3 );

for(;;)
{
if( !cvGrabFrame( capture ))
break;
frame = cvRetrieveFrame( capture );
if( !frame )
break;

detect_and_draw( frame, temp );

if( cvWaitKey( 10 ) >= 0 )
{
//cvReleaseImage( &frame );
//cvReleaseImage( &temp );
cvReleaseCapture( &capture );
cvDestroyWindow(WINNAME);
return 0;
}
}
}
else
{
char* filename = argc == 2 ? argv[1] : (char*)"lena.jpg";
IplImage* image = cvLoadImage( filename, 1 );
IplImage* temp = cvCreateImage( cvSize(image->width/2,image->height/2), 8, 3 );

if( image )
{
cvFlip( image, image, 0 );
image->origin = IPL_ORIGIN_BL;
detect_and_draw( image, temp );
cvWaitKey(0);
cvReleaseImage( &image );
cvReleaseImage( &temp );
}
cvDestroyWindow(WINNAME);
return 0;
}
return 0;
}

void detect_and_draw( IplImage* img, IplImage* temp )
{
int scale = 2;
CvPoint pt1, pt2;
int i;

cvPyrDown( img, temp, CV_GAUSSIAN_5x5 );
#ifdef WIN32
cvFlip( temp, temp, 0 );
#endif
cvClearMemStorage( storage );

if( hid_cascade )
{
CvSeq* faces = cvHaarDetectObjects( temp, hid_cascade, storage,
1.2, 2, CV_HAAR_DO_CANNY_PRUNING );
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i, 0 );
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
#ifdef WIN32
pt1.y = img->height - r->y*scale;
pt2.y = img->height - (r->y+r->height)*scale;
#else
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;
#endif
cvRectangle( img, pt1, pt2, CV_RGB(255,255,0), 3 );
}
}

cvShowImage(WINNAME, img );
//cvReleaseImage( &temp );
}

#ifdef _EiC
main(1,"facedetect.c");
#endif

<!-- Signature -->
分享到:
评论

相关推荐

    基于隐马尔可夫模型的人脸识别 C/C++源代码

    ### 基于隐马尔可夫模型的人脸识别 C/C++源代码解析 #### 隐马尔可夫模型(HMM)与人脸识别 隐马尔可夫模型(Hidden Markov Model, HMM)是一种统计模型,常用于含有时间序列或者顺序数据的场景中。在模式识别领域,...

    人脸检测的C C++源代码

    本项目提供的C++源代码应该涵盖了人脸检测的基本流程,包括加载预训练模型、图像预处理、人脸检测和结果可视化。通过研究和理解这些代码,开发者可以进一步掌握人脸检测技术,并将其应用于各种实际场景,如监控系统...

    人脸检测的C_C++源代码.rar

    本资源“人脸检测的C/C++源代码.rar”提供了一种基于C/C++实现的人脸检测算法,这对于学习和开发相关应用的开发者来说非常有价值。下面将详细介绍这个主题及其相关知识点。 一、人脸检测技术 1. Haar特征与...

    OpenCV+C++图像处理设计-人脸检测与识别系统DEMO源代码.zip

    - `源码`:存放所有C++源代码,可能包括主程序、人脸检测和识别的相关类与函数。 - `Images`:可能包含测试用的图像数据,用于演示和测试程序功能。 - `人脸识别`:可能包含人脸识别相关的算法实现或配置文件。 ...

    人脸检测定位源代码 c++编写

    本资源提供了一个基于C++编写的源代码实现,用于进行人脸检测和定位。以下将详细介绍相关知识点: 1. **人脸识别基础**: - 人脸识别是一种生物特征识别技术,通过对人脸图像特征的提取和比对,实现对个体身份的...

    人脸检测源代码+执行程序

    人脸检测是计算机视觉领域中的一个核心任务,它在安全监控、社交媒体分析、人机交互等多个场景有着广泛应用。在这个项目中,我们关注的...同时,通过阅读和分析源代码,还可以提升C++编程和计算机视觉技术的综合能力。

    人脸检测系统源代码 C++实现

    本文将深入探讨使用C++实现的人脸检测系统,以及涉及到的关键技术,如图形学、MFC(Microsoft Foundation Classes)界面设计以及图像处理的膨胀和腐蚀等操作。 首先,人脸检测的核心算法通常基于机器学习,例如...

    人脸检测源代码 OpenCV

    "人脸检测系统"可能是包含源代码和相关资源的文件夹,其中应该有C++或Python等编程语言实现的示例代码,用于演示如何在OpenCV中应用Adaboost和Haarcascades进行人脸检测。 学习和理解这部分源代码,你需要掌握...

    基于C++的人脸检测系统源代码

    【基于C++的人脸检测系统源代码】是一个深入学习计算机视觉领域的重要实践项目,它涉及到C++编程语言、图像识别和图像处理等多个关键知识点。在这个系统中,开发者使用C++来构建一个能够自动检测和定位图像中人脸的...

    人脸检测与定位c++源程序

    通过阅读和理解这些代码,你可以学习到如何在C++环境中构建人脸检测和定位系统,包括特征提取、分类器训练和关键点检测的具体步骤。 总的来说,人脸检测与定位的C++实现涉及到了图像处理、机器学习和模式识别等多个...

    【QT】人脸识别考勤管理系统源代码_qt考勤_qt人脸检测_qt界面_源码

    【QT】人脸识别考勤管理系统源代码是针对企业或组织实现高效、智能化考勤管理的解决方案。这个系统利用了Qt框架,一个跨平台的C++图形用户界面应用程序开发库,为用户提供了一个直观且易于操作的界面。Qt库不仅支持...

    人脸检测算法的C++源码

    在09章++人脸的检测与定位的文件中,我们可以预期找到实现该算法的源代码。 Viola-Jones算法的关键步骤包括: 1. **特征提取**:使用Haar小波或LBP(局部二值模式)等特征描述图像的局部结构。 2. **弱分类器训练*...

    PCA人脸识别C++源代码

    在这个“PCA人脸识别C++源代码”中,我们可以期待看到如何利用C++实现这一算法。 PCA的基本步骤包括以下几点: 1. **数据预处理**:首先,我们需要对人脸图像进行预处理,通常包括灰度化、归一化以及大小标准化,...

    opencv人脸眼部检测识别项目源代码

    在本项目“opencv人脸眼部检测识别项目源代码”中,开发者使用了OpenCV来实现对多人脸部和眼部的检测。这个项目是经过实际测试的,可以在Visual Studio 2013环境下顺利运行,并且提供了详细的注释,对于学习和理解...

    一个人脸检测的VC++源代码.rar

    这是一个关于人脸识别技术的VC++源代码项目,主要涵盖了如何在Visual C++环境下实现人脸检测功能。人脸识别是一种生物特征识别技术,广泛应用于安全监控、身份验证、社交媒体等领域。在这个项目中,开发者可以学习到...

    完整的包括皮肤及动作识别的C++人脸检测源代码

    本资源提供了一套完整的C++源代码,专用于实现人脸检测,同时还包含了皮肤检测和动作识别功能,这对于理解和开发相关应用的开发者来说极具价值。 1. **人脸检测**:人脸检测是计算机视觉中的基本任务,主要目标是从...

    图像识别源代码-----面部识别源码(C/C++)

    这个资源包包含了关于面部识别的源代码和相关论文,是深入理解C/C++实现面部识别算法的好材料。 首先,我们要了解面部识别的基本流程。面部识别通常包括人脸检测、特征提取、特征匹配三个步骤。人脸检测是找到图像...

Global site tag (gtag.js) - Google Analytics