0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用OpenCV计算机视觉库实现人脸检测系统的设计与实现

电子设计 作者:电子设计 2018-11-23 09:21 次阅读

1.引言

OpenCV(Intel·Open Source Computer Vision Library)是Intel 公司面向应用程序开发者开发的计算机视觉库,其中包含大量的函数用来处理计算机视觉领域中常见的问题,例如运动分析和跟踪、人脸识别、3D 重建和目标识别等[1].可以通过访问http://www.source- forge.net/projects/opencvlibrary 免费获得OpenCV 库以及相关的资料

相对于其它图像函数库, OpenCV 是一种源码开放式的函数库, 开发者可以自由地调用函数库中的相关处理函数。OpenCV 中包含300多个处理函数, 具备强大的图像和矩阵运算能力, 可以大大减少开发者的编程工作量, 有效提高开发效率和程序运行的可靠性。另外, 由于OpenCV 具有很好的移植性, 开发者可以根据需要在MS-Windows 和Linux 两种平台进行开发.

人脸检测(Face Detection)是指在输入图像中确定所有人脸(如果存在)的位置、大小、位姿的过程。人脸检测作为人脸信息处理中的一项关键技术, 近年来成为模式识别与计算机视觉领域内一项受到普遍重视、研究十分活跃的课题。人脸检测问题最初于人脸识别(FaceRecognition)。人脸识别的研究可以追溯到上个世纪六、七十年代, 经过几十年的曲折发展已日趋成熟。人脸检测是自动人脸识别系统中的一个关键环节, 但是早期的人脸识别研究主要针对具有较强约束条件的人脸图像(如无背景的图像), 往往假设人脸位置已知或很容易获得, 因此人脸检测问题并未受到重视。近几年随着电子商务等应用的发展,人脸识别成为最有潜力的生物身份验证手段, 这种应用背景要求自动人脸识别系统能够对一般由此所面临的一系列问题使得人脸检测开始作为一个独立的课题受到研究者的重视。今天, 人脸检测的应用背景已经远远超出了人脸识别系统的范畴, 在基于内容的检索、数字视频处理、视觉监测等方面有着重要的应用价值。

人脸检测研究具有重要的学术价值。人脸是一类具有相当复杂的细节变化的自然结构目标, 此类目标的检测问题的挑战性在于: (1)人脸由于外貌、表情、肤色等不同, 具有模式的可变性; (2)一般可能存在眼镜、胡须等附属物; (3)作为三维物体的人脸的影像不可避免地受由光照产生的阴影的影响。因此, 如果能够找到解决这些问题的方法, 成功构造出人脸检测与跟踪系统, 将为解决其它类似的复杂模式检测问题提供重要的启示。

目前, 国外对人脸检测问题的研究很多, 比较着名的有MIT, CMU等; 国内的清华大学、北京工业大学、中科院计算所和自动化所等都有人员从事人脸检测相关的研究。而且, MPEG7 标准组织已经建立了人脸识别草案小组, 人脸检测算法也是一项征集的内容。随着人脸检测研究的深入, 国际上发表的有关论文数量也大幅度增长。

2.系统设计

本文采用OpenCV 实现人脸检测的原理是基于Adaboost 算法, 该算法是一种分类器算法, 其基本思想是利用大量的分类能力一般的简单分类器(Basic classifier)通过一定的方法叠加(boost)起来, 构成一个分类能力很强的强分类器(Stage classifier), 再将若干个强分类器串联成为分级分类器(classifier cascade)完成图像搜索检测。串联的级数依赖于系统对错误率和识别速度的要求。

本系统由训练和检测两个模块完成, 两部分的流程图如图1 和图2 所示:

采用OpenCV计算机视觉库实现人脸检测系统的设计与实现

图1 训练程序流程图

采用OpenCV计算机视觉库实现人脸检测系统的设计与实现

图2 检测程序流程图

3.系统实现

本系统采用Microsoft VC++编程工具实现, 从OpenCV 官方网站上下载OpenCV 的最新版本后按照安装说明安装OpenCV 开发包, 并在VC++系统中配置好开发环境。系统中实现的主要检测函数如下, 其中调用了OpenCV 函数库中的部分函数。

CRect CFaceDetect::DetectAndDrawFaces( IplImage* img )

{

CRect rc(0,0,0,0);

if( m_pHidCascade && img )

{

int scale = 2;

CvSize img_size = cvGetSize( img );

IplImage* temp = cvCreateImage ( cvSize (img_size.width/2,

img_size.height/2), 8, 3 );

int i;

cvPyrDown( img, temp );

cvClearMemStorage( m_pStorage );

if( m_pHidCascade )

{

CvSeq* faces = cvHaarDetectObjects ( temp,

m_pHidCascade, m_pStorage, 1.2, 2, 1 );

for( i = 0; i < (faces ? faces- >total : 0); i++ )

{

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

cvRectangle( img,

cvPoint(r.x*scale, r.y*scale),

cvPoint ((r.x+r.width)*scale, (r.y+r.height)

*scale),

CV_RGB(255,0,0), 3 );

rc.left = r.x*scale;

rc.top = r.y*scale;

rc.right = (r.x+r.width)*scale;

rc.bottom = (r.y+r.height)*scale;

}

}

cvReleaseImage( &temp );

}

return rc;

}

其中函数cvHaarDetectObjects 使用针对某目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域, 并且将这些区域作为一序列的矩形框返回。函数以不同比例大小的扫描窗口对图像进行几次搜索。每次都要对图像中的这些重叠区域利用cvRunHaarClassifierCascade进行检测。有时候也会利用某些继承(heuristics)技术以减少分析的候选区域, 例如利用Canny 裁减(pruning)方法。函数在处理和收集到候选的方框(全部通过级联分类器各层的区域) 科之后, 接着对这些区域进行组合并且返回一系列各个足够大的组合中的平均矩形。调节程序中的缺省参数(scale_factor=1.1, min_neighbors=3,flags=0)用于对目标进行更精确同时也是耗时较长的进一步检测。为了能对视频图像进行更快的实时检测, 参数设置通常是: scale_factor=1.2,min_neighbors=2, flags=CV_HAAR_DO_CANNY_PRUNING,min_size =

4.结束语

通过编程实现人脸检测系统表明, 应用OpenCV 函数库进行图像处理编程, 功能强大, 简捷高效, 可以使编程人员快速地实现算法。

OpenCV 确实为VC++编程处理数字图像提供了极大的方便, 具有广阔的应用前景。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7325

    浏览量

    87600
  • 检测系统
    +关注

    关注

    3

    文章

    943

    浏览量

    42994
  • WINDOWS
    +关注

    关注

    3

    文章

    3515

    浏览量

    88276
收藏 人收藏

    评论

    相关推荐

    树莓派上使用OpenCV和Python实现实时人脸检测

    理论知识,因此初学者也能轻松跟着步骤实现。 项目所需设备 硬件: 树莓派 3 Model B; 树莓派摄像头模块(PiCam)。 语言和OpenCV Python 3 步骤 本文主要讲述如何使用 PiCam
    的头像 发表于 03-06 09:00 5.1w次阅读

    基于openCV人脸检测系统的设计

    通过对基于Adaboost人脸检测算法的研究,利用该算法与计算机视觉openCV进行
    发表于 12-23 14:19

    ARM Linux下OpenCV的移植和使用方法

    1.引言OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉,它提供了很多函数,这些函数非常高效地
    发表于 11-03 07:01

    如何在RK3288上去安装Opencv开源计算机视觉

    Opencv是什么呢?如何在RK3288上去安装Opencv开源计算机视觉呢?
    发表于 02-16 07:06

    【RISC-V + OpenCV 计算机视觉】用 VisionFive 2 昉·星光 2 进行物体识别

    广泛应用于视频监控、自动驾驶等领域。 基于Debain操作系统OpenCV框架,赛昉科技在VisionFive 2(昉·星光 2)RISC-V单板计算机实现
    发表于 09-08 11:42

    基于OpenCV计算机视觉技术实现

    基于OpenCV计算机视觉技术实现OpencV是用来实现
    发表于 11-23 21:06 0次下载
    基于<b class='flag-5'>OpenCV</b>的<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>技术<b class='flag-5'>实现</b>

    开放源代码的计算机视觉OpenCv的应用

    开放源代码的计算机视觉OpenCv(Intel Open Source Computer Vision Library)由英特尔公司位于俄罗斯的研究实验室所开发,它是一套可免费获得
    发表于 04-05 19:38 90次下载

    基于计算机视觉技术的人脸检测系统设计

    通过对基于Haar-like特征的AdaBoost人脸检测算法研究,利用由该算法训练的级联分类器和计算机视觉
    发表于 08-29 14:36 43次下载
    基于<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>技术的<b class='flag-5'>人脸</b><b class='flag-5'>检测</b><b class='flag-5'>系统</b>设计

    基于openCV人脸检测识别系统的设计

    通过对基于Adaboost人脸检测算法的研究,利用该算法与计算机视觉openCV进行
    发表于 06-15 10:53 477次下载
    基于<b class='flag-5'>openCV</b>的<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>识别<b class='flag-5'>系统</b>的设计

    OpenCV计算机视觉性能更加强大实现嵌入式视觉应用

    上实施复杂算法的项目,该系列是用于计算机视觉应用的最高性能可编程平台。 不过,此类高级计算密集型算法依赖于复杂的低级模块来实现快速上市,没有时间从低级代码开始编写算法,对此仅有一个解决
    发表于 09-15 14:57 1次下载

    openCV人脸检测系统的设计方案探究

    摘要: 通过对基于 Adaboost 人脸检测算法的研究,利用该算法与计算机视觉 openCV
    发表于 10-20 16:39 3次下载

    计算机视觉应用之OpenCV基础教程

    从工业检测系统到自动驾驶系统计算机视觉是一个包括许多有趣应用的广泛领域。许多这样的系统在原型和
    发表于 11-18 04:45 9198次阅读
    <b class='flag-5'>计算机</b><b class='flag-5'>视觉</b>应用之<b class='flag-5'>OpenCV</b>基础教程

    OpenCV跨平台计算机视觉的详细资料简介

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉,可以运行在Linux、Windows、Android和Mac OS操作系统
    发表于 08-19 08:00 2次下载
    <b class='flag-5'>OpenCV</b>跨平台<b class='flag-5'>计算机</b><b class='flag-5'>视觉</b><b class='flag-5'>库</b>的详细资料简介

    计算机视觉中如何调用OpenCV

    学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了【走进OpenCV】系列,主要帮助小伙伴了解如何调用
    的头像 发表于 09-08 10:26 4893次阅读

    opencv计算机视觉介绍

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉,可以运行在Linux、Windows、Android和Mac OS操作系统
    的头像 发表于 04-13 18:23 2919次阅读