《OpenCV》——人脸检测

人脸检测



级联分离器

具体实现

实例(人脸检测)

本实例对合照图片进行人脸检测,并圈出人脸位置,使用的OpenCV自带的级联分类器可从OpenCV源文件的data目录下,加载不同的级联分类器的XML文件对不同对象的检测。

代码实现
python 复制代码
python
# 导入OpenCV库,用于计算机视觉任务,如读取图像、图像处理和显示图像等
import cv2

# 使用cv2.imread函数读取指定路径下的图像文件 'hezhao.jpg'
# 读取后的图像数据将存储在变量image中,图像以BGR(蓝、绿、红)格式存储
image = cv2.imread('hezhao.jpg')

# 将彩色图像转换为灰度图像
# cv2.cvtColor函数用于颜色空间转换,这里将BGR格式的图像转换为灰度图像
# 因为在人脸检测中,灰度图像能减少计算量,并且很多人脸检测算法都是基于灰度图像进行的
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 加载预训练的人脸级联分类器
# cv2.CascadeClassifier函数用于加载Haar级联分类器,这里加载的是默认的正面人脸检测分类器
# 注意:路径中的反斜杠需要使用双反斜杠或原始字符串(在字符串前加r)来避免转义问题
# 这里使用的是绝对路径,指向Python环境中OpenCV库自带的分类器文件
faceCascade = cv2.CascadeClassifier('D:\Python310\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')

# 使用人脸级联分类器在灰度图像中检测人脸
# detectMultiScale函数是人脸检测的核心函数,它会返回检测到的人脸的矩形区域
# scaleFactor=1.05:图像缩放比例,该值越接近1,检测越精确,但速度越慢;值越大,检测速度越快,但可能会漏检
# minNeighbors=10:每个候选矩形应该保留的邻居数,该值越大,误检率越低,但可能会漏检
# minSize=(8, 8):检测窗口的最小尺寸,小于该尺寸的人脸将不会被检测到
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=10, minSize=(8, 8))

# 打印检测到的人脸数量
# 使用format方法将检测到的人脸数量插入到字符串中
print('发现{0}张人脸!'.format(len(faces)))

# 打印检测到的人脸的位置信息
# faces是一个二维数组,每行包含四个值:人脸矩形区域的左上角坐标(x, y)以及宽度w和高度h
print('其位置分别是:', faces)

# 遍历检测到的所有人脸的矩形区域
# 对于每个矩形区域,使用cv2.rectangle函数在原始彩色图像上绘制绿色矩形框
# (x, y):矩形的左上角坐标
# (x + w, y + h):矩形的右下角坐标
# (0, 255, 0):矩形的颜色,这里是绿色(BGR格式)
# 2:矩形框的线宽
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 显示绘制了矩形框的图像
# cv2.imshow函数用于显示图像,第一个参数是窗口的名称,第二个参数是要显示的图像
cv2.imshow('result', image)

# 等待用户按键
# cv2.waitKey(0)表示无限等待,直到用户按下任意键
cv2.waitKey(0)

# 关闭所有OpenCV打开的窗口
# 释放相关资源
cv2.destroyAllWindows()

结果:

相关推荐
Oliverro6 分钟前
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
网络·人工智能
芯盾时代4 小时前
安全大模型智驱网络和数据安全效能跃迁
网络·人工智能·安全·网络安全
彩讯股份3006345 小时前
打造多模态交互新范式|彩讯股份中标2025年中国移动和留言平台AI智能体研发项目
人工智能
思通数科大数据舆情5 小时前
工业安全零事故的智能守护者:一体化AI智能安防平台
人工智能·安全·目标检测·计算机视觉·目标跟踪·数据挖掘·知识图谱
AI360labs_atyun6 小时前
2025 高考:AI 都在哪些地方发挥了作用
人工智能·科技·ai·高考
Yxh181377845547 小时前
短视频矩阵系统技术saas源头6年开发构架
人工智能·矩阵
m0_634448897 小时前
图上合成:用于大型语言模型持续预训练的知识合成数据生成
人工智能·语言模型·自然语言处理
张较瘦_8 小时前
[论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力
论文阅读·人工智能
1296004528 小时前
机器学习的可解释性
人工智能·深度学习·自然语言处理·transformer
何中应8 小时前
第一个人工智能(AI)问答Demo
java·人工智能·语言模型