OpenCV项目实战---人脸检测( 二 )


OpenCV项目实战---人脸检测

文章插图
 
比如上图中 , 横的黑道将人脸中较暗的双眼提取了出来 , 而竖的白道将人脸中较亮的鼻梁提取了出来 。
由于事先不太可能知道要检测的目标的大小 , 这就要求我们的级联表中的分类器具有按比例增大(或者缩小)的能力 , 这样 , 当小的窗口移动完整个待检测图片没有发现目标时 , 我们可以调整分类器的大小 , 然后继续检测 , 直到检测到目标或者窗口与待检测图片的大小相当为止 。人脸检测流程图见图
OpenCV项目实战---人脸检测

文章插图
 
人脸检测具体实现
环境搭建
本项目采用Python作为编辑器 , pycharm作为解释器 。
OpenCV是一个可跨平台的计算机视觉和机器学习的软件库 , 实现了图像处理和计算机视觉方面的很多通用算法 。
安装OpenCV时 , 有以下几种方法 。
一 , 首先可以利用的是pycharm来进行引入
file -- settings --project interpreter-- +
OpenCV项目实战---人脸检测

文章插图
 
选择OpenCV--python ---install
OpenCV项目实战---人脸检测

文章插图
 
如果安装成功 , 随后你可以在project interpreter里来进行版本的查看 。
OpenCV项目实战---人脸检测

文章插图
 
二 , 利用常规命令
Win+r后输入cmd , 随后输入pip install OpenCV-python
如果显示install successfully , 则安装完成 。
 
如果报错 , read time error  , 则可能是库在下载时有延迟的问题 , 需要在命令里加入一个代理 , 这里用到的是豆瓣的 , 在install 后面加入以下命令即可 。
- -index-url https://pypi.douban.com/simple opencv-python
OpenCV项目实战---人脸检测

文章插图
 
OpenCV可以说是人脸物体检测识别中比较常用的一个库 , 利用import cv2来进行调用 。
 
项目代码
对于识别本地图片中的人脸 , 我们需要进行以下几个步骤的操作:
1)把图像转换为灰度图 , 这样可以去除色彩对目标检测的影响 。同时可以降低图像的噪声 。
import cv2  #引入OpenCV模块 #规定图像的路径 。filepath = "./image1.png"  # ./为当前文件夹下的相对路径 , 我们需要将检测图片与程序文件放于同一文件夹下 。img = cv2.imread(filepath)#cv2.IMread就是利用OpenCV模块来读取此路径下的图片文件   imread=image-readgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#img为原始彩色图片 , 这里我们用到了cv2模块的图像颜色转换功能 , 将转换后的图像命名为graycv2.imshow("Image", gray)#显示灰色图像 2)在灰色图像上进行矩形框的绘制
cv2.imshow("Image-gray", img)x = y = 100  # 任意规定一个坐标w =h= 135  # 矩形的宽、高color = (0,255,0)  # 定义绘制颜色 , 遵循bgr模式cv2.rectangle(img, (x, y), (x + w, y + h),color , 3)  #调用cv2里的rectangle来 绘制矩形 , rectangle(图像 , 左上角坐标 , 右下角坐标 , 颜色 , 线粗)cv2.imshow("Image-gray-square", img)  # 显示灰色方框图像 
3)使用分类器查找人脸
CascadeClassifier是Opencv中做人脸检测时候的一个级联分类器 。数据结构包括Data和FeatureEvaluator两个主要部分 。Data中存储的是从训练获得的xml文件中载入的分类器数据;而FeatureEvaluator中是关于特征的载入、存储和计算 。这里采用的训练文件是OpenCV中默认提供的haarcascade_frontalface_default.xml 。至于Haar , LBP的具体原理 , 可以参考opencv的相关文档 , 简单地 , 可以理解为人脸的特征数据 。
face_engine=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')# 导入人脸级联分类器引擎 , '.xml'文件里包含已经训练出来的人脸特征


推荐阅读