您的位置:首页 > 娱乐 > 八卦 > 旅游网页图片素材_数控车床编程入门自学_搜索引擎优化指南_北京网站托管

旅游网页图片素材_数控车床编程入门自学_搜索引擎优化指南_北京网站托管

2025/2/27 17:05:18 来源:https://blog.csdn.net/weixin_69327572/article/details/145581373  浏览:    关键词:旅游网页图片素材_数控车床编程入门自学_搜索引擎优化指南_北京网站托管
旅游网页图片素材_数控车床编程入门自学_搜索引擎优化指南_北京网站托管

代码整体功能概述

这段 Python 代码借助 OpenCV 库实现了一个实时的脸部识别程序,同时简单模拟了姿势检测功能。它会开启计算机的摄像头,持续读取视频帧,对每一帧画面进行脸部检测,若检测到脸部就绘制矩形框标记出来,并且在画面上显示检测到的类别信息,最后按 q 键可以退出程序。

代码详细说明

1. 导入必要的库

python

import cv2
  • 功能:导入 OpenCV 库,该库是一个强大的计算机视觉库,提供了诸多图像处理和计算机视觉算法。
2. 加载脸部识别模型

python

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
  • 功能:使用 cv2.CascadeClassifier 类加载预训练的 Haar 级联分类器模型,此模型用于检测正面人脸。cv2.data.haarcascades 是 OpenCV 自带的 Haar 级联分类器文件所在的目录,haarcascade_frontalface_default.xml 是正面人脸检测的模型文件。
3. 打开摄像头

python

cap = cv2.VideoCapture(0)
  • 功能:使用 cv2.VideoCapture 类打开计算机的默认摄像头(设备编号为 0)。若存在多个摄像头,可通过修改设备编号来选择不同的摄像头。
4. 循环读取视频帧并处理

python

while True:# 读取摄像头的一帧画面ret, frame = cap.read()if not ret:break
  • 功能:开启一个无限循环,持续从摄像头读取视频帧。cap.read() 方法会返回两个值,ret 是一个布尔值,表示是否成功读取到帧;frame 是读取到的视频帧图像。若 retFalse,则说明无法读取到帧,此时跳出循环。
5. 将图像转换为灰度图

python

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  • 功能:使用 cv2.cvtColor 方法将读取到的彩色图像(BGR 格式)转换为灰度图像。因为 Haar 级联分类器在灰度图像上的检测效果更好,并且处理灰度图像的速度更快。
6. 初始化检测到的类别列表

python

detected_classes = []
  • 功能:创建一个空列表 detected_classes,用于存储检测到的类别信息。
7. 脸部检测

python

faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
if len(faces) > 0:for (x, y, w, h) in faces:# 绘制脸部矩形框cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)detected_classes.append("Face")
  • 功能
    • face_cascade.detectMultiScale 方法用于在灰度图像上进行脸部检测。scaleFactor=1.1 表示每次图像缩放的比例;minNeighbors=5 表示每个候选矩形框需要满足的最小邻居数;minSize=(30, 30) 表示检测到的人脸的最小尺寸。
    • 若检测到人脸(即 faces 列表的长度大于 0),则遍历 faces 列表,使用 cv2.rectangle 方法在原始彩色图像上绘制蓝色(BGR 格式为 (255, 0, 0))的矩形框来标记人脸,矩形框的左上角坐标为 (x, y),宽度为 w,高度为 h,线宽为 2。
    • 最后将 "Face" 添加到 detected_classes 列表中。
8. 姿势检测(简单模拟)

python

if len(detected_classes) > 0:detected_classes.append("Possible Pose")
  • 功能:简单模拟姿势检测功能。若检测到了脸部(即 detected_classes 列表的长度大于 0),则将 "Possible Pose" 添加到 detected_classes 列表中。需要注意的是,OpenCV 原生对姿势检测的功能较弱,这里只是给出一个提示信息,若需要更精确的姿势检测,可以使用更专业的库,如 mmpose
9. 显示检测到的类别信息

python

if detected_classes:classes_text = ", ".join(detected_classes)cv2.putText(frame, f"Detected: {classes_text}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
  • 功能:若 detected_classes 列表不为空,则将列表中的元素用逗号连接成一个字符串 classes_text。然后使用 cv2.putText 方法在原始彩色图像的左上角(坐标为 (10, 30))显示检测到的类别信息,字体为 cv2.FONT_HERSHEY_SIMPLEX,字体大小为 1,颜色为绿色(BGR 格式为 (0, 255, 0)),线宽为 2。
10. 显示处理后的图像

python

cv2.imshow('Combined Detection', frame)
  • 功能:使用 cv2.imshow 方法显示处理后的图像,窗口标题为 "Combined Detection"
11. 按 q 键退出循环

python

if cv2.waitKey(1) & 0xFF == ord('q'):break
  • 功能:使用 cv2.waitKey(1) 方法等待 1 毫秒,检测是否有按键事件发生。& 0xFF 是为了确保只获取按键的低 8 位。若按下的键是 q,则跳出循环。
12. 释放摄像头并关闭所有窗口

python

cap.release()
cv2.destroyAllWindows()
  • 功能
    • cap.release() 方法用于释放摄像头资源。
    • cv2.destroyAllWindows() 方法用于关闭所有由 OpenCV 打开的窗口。
import cv2# 加载脸部识别模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')# 打开摄像头
cap = cv2.VideoCapture(0)while True:# 读取摄像头的一帧画面ret, frame = cap.read()if not ret:break# 将图像转换为灰度图,因为 Haar 级联分类器在灰度图上效果更好gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)detected_classes = []# 脸部检测faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))if len(faces) > 0:for (x, y, w, h) in faces:# 绘制脸部矩形框cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)detected_classes.append("Face")# 姿势检测(简单模拟)# 这里仅作提示信息,opencv 原生对姿势检测功能弱# 你可以根据需求使用更专业的库如 mmpose 等实现if len(detected_classes) > 0:detected_classes.append("Possible Pose")# 显示检测到的类别信息if detected_classes:classes_text = ", ".join(detected_classes)cv2.putText(frame, f"Detected: {classes_text}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 显示处理后的图像cv2.imshow('Combined Detection', frame)# 按 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com