基于OpenCV的 人脸检测探讨

来源 :城市建设理论研究 | 被引量 : 0次 | 上传用户:viagra2
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:简要介绍用于数字图像处理的开源代码的计算机视觉类库——OpenCV,利用OpenCv进行人脸检测,实践表明OpenCV在人脸检测中具有高效性和便捷性。
  关键词:OpenCV 计算机视觉 人脸检测
  中图分类号:G623文献标识码: A
  
  
  1、引言
   人脸检测技术是计算机对输入的图像进行检测并判断是否出现人脸,并且能够准确的识别出人脸所在位置的自动检测技术。这一项检测技术目前主要用于人脸追踪、基于人臉的图像检索以及用于安全监控等领域,已经成为计算机视觉与模式识别领域内的研究重点的课题,人脸检测是自动人脸识别系统中的一个关键环节,人脸检测研究具有重要的学术与现实价值,人脸是一类具有相当复杂的细节变化的自然结构目标。检测的主要难点在于:
  (1)人脸具有相当复杂的细节变化,比如相貌、表情、肤色等
  (2)人脸可能有相关的遮挡物,比如眼镜、头发覆盖等
  (3)在拍照时,人脸可能成不同的姿态,比如侧脸、正脸,这些都能影响人脸的检测。
  (4)光源的种类,强弱和角度的不同,使得在人脸上产生不同的性质的反射,从而形成不同的阴影区域,这增加了人脸检测的难度。
  以上的各个问题都会对人脸检测产生影响,而本文采用Opencv实现人脸检测的原理是基于Adaboost算法,该算法是一种分类器算法,是利用大量的分类能力一般的简单分类器通过一定的方法叠加起来,构成一个强分类器,再将若干个强分类器串联成为分级分类器完成图像搜索检测。
  2、OpenCv介绍
   Opencv是开放源代码的计算机视觉类库,由英特尔公司位于俄罗斯的研究实验室开发,它是可以免费获得的由一些C函数和C++类所组成的库,用来实现常用的图像处理及计算机视觉算法,已经广泛用于人脸识别、目标运动检测、图像处理等领域。选用它的原因:Opencv的图像处理功能相当强大,不仅能处理图像的格式、提供移动检测等功能,由Opencv的模块介绍可以看出主要的功能函数在cv,cvaux、cxcore模块中,而与操作系统有关的图像界面如在highgui模块。
  3、人脸检测的程序编写
  获取OpenCV官方发布的软件包以及CMake软件包按照说明进行配置编译,部署好开发环境。程序中主要实现检测的函数如下:
  检测模块使用了Opencv函数库,启动后会调用函数CvCapture*capture=0;获取视频的抽象接口,获取图像后使用人脸分类器haarcascade_frontalface_alt.xml进行检测,并用圆圈画出人脸区域。
  部分代码如下:
  void detect_and_draw( IplImage* img )
  {
   static CvScalar colors[] =
  { {{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},{{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}} };
   double scale = 1.3;
  IplImage*gray= cvCreateImage( cvSize(img->width,img->height), 8, 1 );
   IplImage*small_img= cvCreateImage(cvSize(cvRound (img->width/scale),cvRound (img->height/scale)), 8, 1 ); int i;
   cvCvtColor(img,gray, CV_BGR2GRAY );cvResize(gray,small_img,CV_INTER_LINEAR ); //缩小灰色图片
   cvEqualizeHist( small_img, small_img ); //灰度图象直方图均衡化
   cvClearMemStorage( storage ); //释放内存块
   if( cascade )
  { //cvHaarDetectObjects是opencv检测人脸的接口
  CvSeq*faces=cvHaarDetectObjects(small_img, cascade, storage,1.1, 2, 0,cvSize(30, 30) );
   //画出检测到的人脸外框(可检测到多个人脸)
  for( i = 0; i < (faces ? faces->total : 0); i++ )
   { //返回索引所指定的元素指针
   CvRect*r= (CvRect*)cvGetSeqElem( faces, i );
   //确定圆心,用圆圈来确定人脸位置
  CvPoint center;
  int radius;
  center.x=cvRound((r->x+r->
  width*0.5)*scale);
  center.y=cvRound((r->y+r->
  height*0.5)*scale);
  radius=cvRound((r->width+ r->height)*0.25*scale);
  cvCircle(img,center,radius, colors[i%8], 3, 8, 0 );
   } }
   cvShowImage( "result", img );
   cvReleaseImage( &gray );
   cvReleaseImage( &small_img );
  }
  
  4、结语
  经过测试,基于Opencv的人脸检测达到预期的功能。但在还需要进一步深化分类器,因为这个分类器只能检测出正面脸型。利用OpenCV中的数字图像处理函数可以使得图像处理简单,对缩短程序的开发周期有着十分显著效果。Opencv是免费开放源代码的,程序员可以修改其源代码,更能优化开发,且基于Qt的编程可以移植到不同的平台上,适应性强。
  
  参考文献
  [1]刘瑞祯、于仕琪.OpenCV教程[M].北京:北京航空航天大学出版社,2007:1-2
  [2]Visual C++ 数字图像模式识别典型案例详解[M]北京:机械工业出版,2012:174-205
  
  作者简介: 蓝芸根(1985-),男,工程师,工程硕士,从事检测技术及自动化装置研究
其他文献
文章介绍了斯蒂文·厄里希建筑事务(简称SEA)所及他们的6个设计作品,SEA的设计风格、设计思想与设计方法.
中国的工艺美术有着悠久的历史和灿烂的成就,但却在近代进入了低谷。虽然从生产的形态来说,工艺美术服务于手工生产。但是其意义却远不止于此。本文从中国历史上对于工艺美术
剪贴画作为拼贴画的一种,主要采用废旧画报、旧挂历、广告宣传品为原材料进行创作。虽然原材料简单,但经过作者的巧妙构思,变废为宝,也能登上大雅之堂。虽然剪贴画在表现形式
花鼓灯锣鼓艺术是花鼓灯艺术的灵魂。它在乐器构成、演奏方式等方面自成特色,且有伴奏灯歌、烘托舞蹈等审美功能。在风格上既保留了我国北方锣鼓的粗犷、奔放、热烈的气势,又
“客家”民系源于中原,是汉民族的重要分支。客家传统服饰的风格简朴、大方、宽松、舒适,具有浓重的朴素、实用之美。这种服饰风格是客家独特的历史原因和文化背景所决定的。
文章阐述了导学要因势利导,要引导学生的主体意识觉醒,明确学习目的,引导提高能力,引导学会学习的方法,引导优良品格的培养.
文中采用了问卷的形式调查现在高校学生对自己的校服所持观点,得出不同结论,本文主要从调查结果中探讨大学校服的设计,在款式、色彩、面料、尺寸上的研究.款式上更注重简洁、
随着科学技术的不断进步,科研档案保密工作正面临着一系列新问题和新挑战。档案工作者必须迎难而上,增强保密意识,建立健全各项制度,既做好科研档案保密工作又能更好地为科研
对城郊森林公园的界定进行了探讨,总结分析了相关文献研究情况。介绍了我国城郊森林公园发展动态和面临的主要问题,提出了未来重点研究的建议。
当前我国正在进行新农村的建设,新农村建设即是在当前农业的基础上实现农业的现代化,即经营管理、经济结构、农民生活消费、农业资源环境等都需要实现现代化,这样通过土地整理工