OpenCV的应用:简单的人脸识别和检测

一.基础

人脸检测是计算机视觉领域的基础任务,核心目标是从图像或视频帧中自动定位并识别出人脸区域(通常用矩形边界框标记),不涉及身份识别,仅关注 "是否存在人脸" 及 "人脸在哪里"。其原理可分为传统方法现代深度学习方法两大体系,核心逻辑是 "特征提取 + 分类判断",但具体实现差异较大。

通用流程:从图像到人脸框的核心步骤

无论传统方法还是深度学习方法,人脸检测的基本流程可概括为以下四步:

  1. 图像预处理:统一输入格式(如灰度化、尺寸归一化),减少干扰信息(如降噪);
  2. 候选区域生成:通过滑动窗口、特征响应等方式,筛选出可能含有人脸的区域;
  3. 特征提取:从候选区域中提取能表征 "人脸" 的关键特征(如五官分布、边缘纹理等);
  4. 分类判断:通过分类器判断候选区域是否为人脸,最终输出所有为人脸的边界框。

二.实现

OpenCV中自带已训练好的检测器,包括面部、眼睛、猫脸等,都保存在xml文件中,通过以下方式找到他们

python 复制代码
import cv2 as cv
print(cv.__file__)

利用这些文件来识别人脸,眼睛等。检测流程如下:

1.读取图片,并转化成灰度图

2.实例化人脸和眼睛检测的分类器对象

#1实例化级联分类器

classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

#加载分类器

classifier.load("haarcascade_frontalface_default.xml")

3.进行人脸和眼睛的识别检测

rect = classifier.detectMultScale(gray,scaleFactor,minNeighbors,minSize,maxsize)

**gray:**要进行检测的人脸图片

**scaleFactor:**前后俩次扫描中,搜索窗口的比例系数

**minNeighbors:**目标被检测的次数才会被认为是检测的目标

**minSize,maxsize:**目标的最小尺寸和最大尺寸

4.将目标检测结果绘制出来

5.主程序

python 复制代码
import cv2 as cv
import matplotlib.pyplot as plt

# 1.以灰度图的形式读取图片
img = cv.imread("C:\\Users\\JWTV\\Desktop\\111.png")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# 2.实例化OpenCV人脸和眼睛识别的分类器
face_cas = cv.CascadeClassifier("E:\\py\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml")
face_cas.load('E:\\py\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')
eyes_cas = cv.CascadeClassifier("E:\\py\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml")
eyes_cas.load("E:\\py\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml")

# 3.调用识别人脸
faceRects = face_cas.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
for faceRect in faceRects:
    x, y, w, h = faceRect
    # 框出人脸
    cv.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
    # 4.在识别出的人脸中进行眼睛的检测
    roi_color = img[y:y + h, x:x + w]
    roi_gray = gray[y:y + h, x:x + w]
    eyes = eyes_cas.detectMultiScale(roi_gray)
    for (ex, ey, ew, eh) in eyes:
        cv.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)

# 检测结果的绘制
plt.figure(figsize=(8, 6), dpi=100)
plt.imshow(img[:, :, ::-1]), plt.title('result')
plt.xticks([]), plt.yticks([])
plt.show()

6.在视频中也可以进行类似的操作

python 复制代码
import cv2 as cv
import matplotlib.pyplot as plt
# 1.读取视频
cap = cv.VideoCapture("C:\\Users\\JWTV\\Desktop\\111.png")
# 2.在每一帧数据中进行人脸识别
while(cap.isOpened()):
    ret,frame = cap.read( )
    if ret==True:
        gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
        # 3.实例化OpenCV人脸识别的分类器
        face_cas = cv.CascadeClassifier("E:\\py\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml")
        face_cas.load('E:\\py\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')
        #4.调用识别人脸
        faceRects =face_cas.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32, 32))
        for faceRect in faceRects:
            x,y,w,h = faceRect
        # 框出人脸
            cv.rectangle(frame,(x,y),(x + h,y + w) , (0,255,0),3)
        cv.imshow("frame",frame)
        if cv.waitKey(1) & 0xFF == ord('q') :
            break
#5.释放资源
cap.release()
cv.destroyAllWindows()
相关推荐
Code_流苏38 分钟前
ChatGPT Agent深度解析:告别单纯问答,一个指令搞定复杂任务?
人工智能·自然语言处理·chatgpt·openai·agent·智能体
别摸我的婴儿肥42 分钟前
从0开始LLM-注意力机制-4
人工智能·python·算法
聚客AI42 分钟前
LLM→RAG→Agent→Training的企业级AI应用落地分层实施路线图
人工智能·llm·agent
芒果快进我嘴里1 小时前
opencv-图像处理
人工智能·opencv·计算机视觉
新智元1 小时前
金牌模型三位核心华人光速离职!谷歌IMO夺金24h即遭小扎闪电抄家
人工智能·openai
数据饕餮1 小时前
AI大模型打造金融智能信审助手04.七大金融监管相关政策
人工智能·python·大模型·rag
Mr.小海1 小时前
金融大模型与AI在金融业务中的应用调研报告(2025年)
人工智能·算法·机器学习·chatgpt·金融·gpt-3·文心一言
新智元1 小时前
一夜落幕!AWS上海AI研究院解散,首席应用科学家告别
人工智能·openai
新智元1 小时前
终结Coding?ShellAgent三句话造出马斯克同款「AI女友」!
人工智能·openai
优秘智能UMI1 小时前
金融系统AIGC能力中心赋能实战指南
大数据·人工智能·深度学习·信息可视化·aigc