智能图像处理:Python和OpenCV实现-课件 13.2 人脸检测_第1页
智能图像处理:Python和OpenCV实现-课件 13.2 人脸检测_第2页
智能图像处理:Python和OpenCV实现-课件 13.2 人脸检测_第3页
智能图像处理:Python和OpenCV实现-课件 13.2 人脸检测_第4页
智能图像处理:Python和OpenCV实现-课件 13.2 人脸检测_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

13.2人脸检测目录13.2.1人脸检测简介13.2.2图像预处理13.2.3Haar特征分类器13.2.4人脸检测程序人脸检测

人脸检测与识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或相机采集含有人脸的视频流或图像,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。13.2.1人脸检测简介1.加载分类器,找到分类器的位置,如*\opencv\sources\data\haarcascades(harr分类器)。2.调用detectMultiScale()函数进行检测,调整函数的参数可以使检测结果更加精确。3.

把检测到的人脸等用矩形(或者圆形等其他图形)标记出来。13.2.1人脸检测简介

调用OpenCV训练好的分类器和自带的检测函数检测人脸、人眼等的步骤如下:010302

图像预处理,先把图像转化为灰度图像。使用的OpenCV函数是:gray=cv2.cvtColor(image,cv.COLOR_BGR2GRAY)这样的转化可能会造成图像的灰度值分布不均匀,通常认为,对所有可用像素强度值都均衡使用,才是一副高质量的图像。所以我们需要让图像的灰度直方图尽可能的平稳,OpenCV提供了一个简单好用的均衡化函数。提高对比度和增加亮度使用的OpenCV函数是new_img=cv2.addWeighted(img,c,new_img,1-c,b)

其中c是对比度倍数,b是亮度增加数。13.2.2图像预处理cv2.equalizeHist(gray,gray)直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法,在一个完全均衡化的直方图中,图像中所包含的像素数量是相等的①Haar特征是浮点数计算,LBP特征是整数计算;②LBP训练需要的样本数量比Haar大;③LBP的速度一般比Haar快;④同样的样本Haar训练出来的检测结果要比LBP准确;13.2.3Haar特征分类器利用OpenCV自带的xml文件,可以实时检测摄像头中人脸Haar特征或LBP特征,它们描述不同的局部信息,Haar描述的是图像在局部范围内像素值明暗变换信息,LBP描述的是图像在局部范围内对应的纹理信息,Haar与LBP区别:⑤扩大LBP的样本数据可达到Haar的训练效果13.2.3Haar特征分类器Haar特征分类器是一个xml文件,文件描述了检测物体的Haar特征值,Haar分类器需要通过大量的数据来训练。Haar特征包括三类特征:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况,如脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。13.2.4人脸检测程序对图像进行人脸特征矩形检测,符合人脸特征的区域会被认定为人脸。在开始人脸检测时,需要加载Haar分类器。循环读取人脸的矩形对象列表,获得人脸矩形的坐标和宽高,然后在原图像中画出该矩形框,调用的是OpenCV的rectangle方法,其中矩形框的颜色等是可调整的,putText函数是在图像上加文字信息(如文字、位置、字体、大小、颜色、粗细等)。在人脸检测中用到的检测函数是detectMultiScale(),它可以检测出图像中所有的人脸,并将人脸用向量保存各个人脸的坐标、大小(用矩形表示),其语法格式为:objects=cv2.CascadeClassifier.detectMultiScale(image[,scaleFactor[,minNeighbors[,flags[,minSize[,maxSize]]]]])13.2.4人脸检测程序其中输入输出参数如下:objects:表示被检测物体的矩形框向量组;image:表示的是要检测的输入图像,一般为灰度图像,加快检测速度;scaleFactor:表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;minNeighbors:表示构成检测目标的相邻矩形的最小个数(默认为3个)。如果组成检测目标的小矩形的个数和小于min_neighbors-1都会被排除。如果min_neighbors为0,则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上;flags:使用默认值,或使用CV_HAAR_DO_CANNY_PRUNING。如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,这些区域通常不会是人脸所在区域;minSize为目标的最小尺寸,用来限制得到的目标区域的范围;minSize为目标的最大尺寸,用来限制得到的目标区域的范围。13.2.4人脸检测程序使用haar分类器对人脸进行检测,并检测出眼睛和是否微笑。程序代码如下:importcv2facehaar='C:/ProgramData/anaconda3/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml'eyehaar='C:/ProgramData/anaconda3/Lib/site-packages/cv2/data/haarcascade_eye.xml'smilehaar='C:/ProgramData/anaconda3/Lib/site-packages/cv2/data/haarcascade_smile.xml'

face_detector=cv2.CascadeClassifier(facehaar)#人脸分类器eye_detector=cv2.CascadeClassifier(eyehaar)#眼睛分类器smile_detector=cv2.CascadeClassifier(smilehaar)#微笑分类器

image=cv2.imread('d:/pics/face_smile1.jpg')gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)cv2.equalizeHist(gray,gray)cv2.imshow("Origin_img",image)faces=face_detector.detectMultiScale(gray,1.15,5)print("face",faces)13.2.4人脸检测程序forx,y,w,hinfaces:cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2)cv2.imshow("face_rect",image)#把脸单独拿出来检测脸face_img=gray[y:y+h,x:w+x]cv2.imshow("face_img",face_img)eyes=eye_detector.detectMultiScale(face_img,1.3,5,0,(40,40))forex,ey,ew,ehineyes:cv2.rectangle(image,(x+ex,y+ey),(x+ex+ew,y+ey+eh),(255,0,0),2)#cv2.imshow("eyes_rect",image)smile=smile_detector.detectMultiScale(face_img,1.16,25,0,(25,25))if(len(smile)>=0):print("检测到微笑")cv2.putText(image,'Smile',(x,y-20),3,1.3,(0,255,0),2)

cv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论