OpenCV(16)–人脸检测

1. 简单介绍

在opencv中,主要有 Haar特征 和 LBP特征 进行人脸检测。
opencv自带训练好的分类器,在E://vs//opencv//sources//data//目录下有“lbpcascades”,“haarcascades”,“hogcascades”三个文件夹,分别表示通过“haar”、“hog”和“lbp”三种不同的特征而训练出的分类器。"haar"特征主要用于人脸检测,“hog”特征主要用于行人检测,“lbp”特征主要用于人脸识别。如,在“haarcascades”下是大量的针对不同目标的训练文件:
在这里插入图片描述
人脸检测器(默认):haarcascade_frontalface_default.xml
人脸检测器(快速Harr)haarcascade_frontalface_alt2.xml
人脸检测器(侧视):haarcascade_profileface.xml
眼部检测器(左眼):haarcascade_lefteye_2splits.xml
眼部检测器(右眼):haarcascade_righteye_2splits.xml
嘴部检测器:haarcascade_mcs_mouth.xml
鼻子检测器:haarcascade_mcs_nose.xml
身体检测器:haarcascade_fullbody.xml
人脸检测器(快速LBP):lbpcascade_frontalface.xml

2. 分类器的使用方法

在上面我们可以看到,每一个xml文件都是具有特定检测功能的检测器。我们可以通过以下步骤来使用检测器对图片进行特征的检测识别:

  1. 获得分类器的路径:
    path = 'E://vs//opencv//sources

OpenCV 中实现人脸检测功能,主要依赖于其提供的级联分类器(`CascadeClassifier`)。该方法基于 Haar 特征或 LBP(局部二值模式)特征进行训练,并用于检测图像中的特定对象,例如人脸。以下是详细的实现步骤和方法: ### 人脸检测的实现流程 1. **加载图像并转换为灰度图** 由于人脸检测通常在灰度图像上进行,首先需要将彩色图像转换为灰度图像。 ```python gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) ``` 2. **加载预训练的人脸检测模型文件** OpenCV 提供了多个预训练的 XML 模型文件,其中最常用的是 `haarcascade_frontalface_default.xml` 和 `haarcascade_frontalface_alt_tree.xml`。这些模型可用于正面人脸检测。 ```python face_detector = cv.CascadeClassifier("haarcascade_frontalface_default.xml") ``` 3. **执行人脸检测** 使用 `detectMultiScale` 方法对图像中的人脸进行多尺度检测。 ```python faces = face_detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) ``` - `scaleFactor`:图像缩放比例,用于多尺度检测,默认值为 `1.01–1.5`。 - `minNeighbors`:检测框保留阈值,值越高,误检率越低[^2]。 - `minSize`:人脸最小尺寸,小于该尺寸的目标将被忽略。 4. **绘制检测结果** 在检测到的人脸区域绘制矩形框以可视化结果。 ```python for (x, y, w, h) in faces: cv.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2) ``` 5. **显示图像与窗口控制** 使用 `cv.imshow()` 显示图像,并通过 `cv.waitKey(0)` 等待用户操作,最后销毁所有窗口。 ```python cv.imshow("Face Detection", image) cv.waitKey(0) cv.destroyAllWindows() ``` ### 完整示例代码 ```python import cv2 as cv import numpy as np def face_detect_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) face_detector = cv.CascadeClassifier("haarcascade_frontalface_default.xml") faces = face_detector.detectMultiScale(gray, 1.1, 5) for x, y, w, h in faces: cv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) cv.imshow("Face Detection", image) src = cv.imread("./test_face.jpg") cv.namedWindow("Input Image", cv.WINDOW_AUTOSIZE) cv.imshow("Input Image", src) face_detect_demo(src) cv.waitKey(0) cv.destroyAllWindows() ``` ### 注意事项 - 若使用摄像头进行实时检测,可结合 `cv.VideoCapture()` 获取视频流并在每一帧上调用检测函数。 - 对于不同角度或遮挡较多的人脸,可以尝试使用不同的模型文件,如 `haarcascade_profileface.xml`(侧脸检测)等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值