OpenCV: 简单实现人脸识别
安装
1 | pip install numpy |
OpenCV 主要模块
core
核心功能模块。该模块主要包含 OpenCV 库的基础结构以及基本操作,例如 OpenCV 基础数据结构、绘图函数、数组操作相关函数、动态数据结构等 calib3d:
这个模块名称是有 calibration(校准)和 3D 两个术语的缩写组合而成。包含了相机标定与立体视觉等功能,例如物体位姿估计、三维重建、摄像头标定等dnn
深度学习模块。该模块是 OpenCV4 版的一个特色,主要包括:构建神经网络、加载序列化网络模型等。但这一模块目前仅适用与正向传递计算(测试网络),原则上不支持反向计算(训练网络)。
feature2d
该模块是由 feature(特征)和 2D 两个术语的缩写组合而成的,其功能主要为处理图像特征点,例如特征检测、描述、匹配等
flann
快速近似最邻近库(Fast Library for Approximate Nearest Neighbors)。该模块是高维的近似近邻快速搜索算法库,主要包含快速近似近邻搜索、聚类等
gapi
该模块是 OpenCV4.0 中新增模块,旨在加速常规的图像处理。与其他模块相比,这个模块主要充当框架,而不是某些特定的计算机视觉算法
highgui
高层 GUI,包含创建和操作显示图像的窗口、处理鼠标事件及键盘命令、提高图形交互可视化界面等
imgcodecs
图像文件读取与保存模块,主要用于图像文件读取与保存
imgproc
该模块名称是由 image(图像)和 process(处理)两个组合而成。是重要的图像处理模块,主要包含:图像滤波、几何变换、直方图、特征检测、目标检测等
ml
机器学习模块,主要包括:统计分类、回归、数据聚类等
objdetect
目标检测模块,主要用于图像的目标检测,如检测 Haar 特征
photo
计算摄像模块,只要包含图像修复、去燥等
stitching
图像拼接模块,主要包含:特征点寻找与匹配图像、估计旋转、自动校准、接缝估计等图像拼接过程的相关内容
video
视频分析模块,主要包含:运动估计、背景分离、对象跟踪等视频处理等
videoio
视频输入 / 输出模块,主要用于读取、写入视频 或者图像序列
图片基本操作
摄像头采集图片
1 | # 引入OpenCV库 |
读取图片
1 | cv2.imread(path, 标记) |
第二个参数指定图片被读取的方式:
cv2.IMREAD_COLOR: 读入彩色图像,默认模式;cv2.IMREAD_GRAYSCALE: 以灰度模式读入图像;cv2.IMREAD_UNCHANGED: 加载图像包含alpha通道。使用数字简约表示以上三种标记,分别为
1,0或-1。
1 | import cv2 |
显示图像
1 | import cv2 |
1 | imshow(窗口名称, 图片对象) |
保存图片
1 | import cv2 |
1 | import cv2 |
1 | cv2.imwrite(path, 图片对象) |
色彩空间
色彩空间(Color space)是对色彩的组织方式,是坐标系统和子空间的阐述,位于系统的每种颜色都有单个点表示。
RGB
OpenCV中默认的色彩空间是BGR。BGR与RGB的区别只是三个颜色信道的位置发生了变化,实际上原理相同。
HSV 与 HSL 色彩空间
为了更好的数字化处理颜色,提出了
HSV,HSL两个色彩空间。
HSV色彩空间中,H是色调(hue),S是饱和度(saturation),V是明度(value)。
HSL色彩空间中,H是色调(hue),S是饱和度(saturation),L是亮度(lightness)。
灰度空间
在
OpenCV的灰度空间中,和一般的色彩空间相同,每一个颜色都有三个量,但是只有第一个亮度有值,所以表示为(亮度,0,0)。其中,亮度是根据如下灰度公式计算而得:
Gray = R*0.299 + G*0.587 + B*0.114
色彩空间转换
经常用到的是以下两种:
BGR空间到Gray空间 的转换;BGR空间到HSV空间 的转换。
使用的函数为:cv2.cvtColor()。
它的函数声明为:
cv2.cvtColor(图片对象,转换类型)
对于
BGR到Gray的转换,使cv2.COLOR_BGR2GRAY类型。同样的,对于
BGR到HSV的转换,使用cv2.COLOR_BGR2HSV类型。
1 | import cv2, requests |
人脸识别应用
类 Harr 特征
图像中的特征通常是指,图片的像素点经过一系列的运算之后得到的结果,这些结果可能是向量、矩阵和多维数据等等。类
Harr特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。Harr 特征类别
可分为三类:边缘特征、线性特征、中心特征和对角线特征
边缘特征
线性特征
中心特征和对角线特征
使用 Harr 分类器检测人脸
OpenCV 中的人脸训练模型格式为 XML,可以从 https://github.com/opencv/opencv/tree/master/data/haarcascades 。在此我们使用Harrcascade_frontalface_default.xml模型检测人脸。
声明分类器:
1 | CascadeClassifier(path) |
调用分类函数:
1 | detectMultiScale(img,scaleFactor, minNeighbors, minSize)` |
参数说明:
- 图片对象:待识别图片对象;
scaleFactor:图像缩放比例;minNeighbors:对特征检测点周边多少有效点同时检测,这样可避免因选取的特征检测点太小而导致遗漏;minSize:特征检测点的最小尺寸,可选参数。
1 | import cv2 |


摄像头实时识别
1 | import cv2 |

