OpenCV人脸识别的具体实现(附带实例)
OpenCV(Open Source Computer Vision Library)是一个功能强大的跨平台开源计算机视觉库,可应用于人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶等诸多领域。这些应用领域将人们的注意力引向一个当前科技和社会的热点,就是人工智能。
人脸检测的任务是从一个图像中寻找出人脸所在的位置和大小。OpenCV 提供了级联分类器(cascade classifier)和人脸特征数据,只用少量代码就能实现人脸检测功能。
实现人脸识别的步骤为:
1) 导入 cv2 模块:
2) 从文件中加载一个含有人脸的图像,并将其转换为一个灰度图像。
3) 利用人脸特征数据创建一个人脸检测器(CascadeClassifier 类的实例),然后调用该实例的 detectMultiScale 方法检测图像中的人脸区域,将检测结果返回给变量 faces。
4) 在检测图像中的每一个人脸区域上画上矩形框:
5) 把标注矩形框后的图像显示到窗口中:
6) 等待用户按下任意键后销毁所有窗口:

图 1 人脸检测效果
人脸检测的任务是从一个图像中寻找出人脸所在的位置和大小。OpenCV 提供了级联分类器(cascade classifier)和人脸特征数据,只用少量代码就能实现人脸检测功能。
实现人脸识别的步骤为:
1) 导入 cv2 模块:
import cv2
2) 从文件中加载一个含有人脸的图像,并将其转换为一个灰度图像。
img=cv2.imread('face.jpg') gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)OpenCV cvtColor() 方法是用于转换图像的色彩空间,使用 cv2.COLOR_BGR2GRAY 参数可以将一个彩色图像转换为灰度图像。
3) 利用人脸特征数据创建一个人脸检测器(CascadeClassifier 类的实例),然后调用该实例的 detectMultiScale 方法检测图像中的人脸区域,将检测结果返回给变量 faces。
file='haarcascade_frontalface_default.xml' face_cascade=cv2.CascadeClassifier(file) #检测人脸区域 faces=face_cascade.detectMultiScale(gray, 1.2, 4)在调用 detectMultiScale() 方法的参数中:
- 第 1 个参数是一个灰度图像;
- 第 2 个参数表示在前后两次相继的扫描中搜索窗口的比例系数(默认为 1.1,即每次搜索窗口依次扩大 10%);
- 第 3 个参数表示构成检测目标的相邻矩形的最小个数(默认为 3 个)。
4) 在检测图像中的每一个人脸区域上画上矩形框:
#标注人脸区域 for(x, y, w, h) in faces: cv2.rectangle(img,(x, y), (x+w, y+h), (255, 0, 0), 3)检测出的人脸区域是一个矩形,由左上角坐标 (x,y) 和矩形的宽度 w 和高度 h 来确定。利用 cv2.rectangle() 方法可以在图像上画出一个矩形,该方法的第 1 个参数是图像,第 2 个参数是矩形的左上角坐标 (x, y),第 3 个参数是矩形的右下角坐标 (x+w, y+h),第 4 个参数是线条的颜色,第 5 个参数是线条的宽度。
5) 把标注矩形框后的图像显示到窗口中:
cv2.imshow('Image', img) #显示检测结果到窗口
6) 等待用户按下任意键后销毁所有窗口:
cv2.waitKey(0) #销毁所有窗口 cv2.destroyAllWindows()运行程序,效果如下图所示:

图 1 人脸检测效果