当前位置:   article > 正文

OpenCV人脸检测案例实战

OpenCV人脸检测案例实战

人脸检测是一种计算机视觉技术,旨在识别图像或视频中的人脸。这项技术的基本内容包括使用特定的算法和模型来定位和识别人脸,通常涉及在图像中寻找面部特征,如眼睛、鼻子、嘴巴等,以便准确地确定人脸的位置和边界。人脸检测技术的重要性在于它在许多领域中具有广泛的应用,包括人脸识别、安全监控、人脸融合等。

在人脸识别领域,人脸检测是一项关键技术,它为识别和验证个人身份提供了基础。通过检测和提取人脸特征,系统可以对个体进行准确的识别,用于解锁手机、进入安全区域、进行身份验证等场景。在安全监控方面,人脸检测可以帮助监控系统自动识别出监控画面中出现的人脸,并及时作出响应。此外,人脸检测还广泛应用于社交媒体、摄影美化、虚拟试衣间等领域,为用户提供更便捷和个性化的体验。

总之,人脸检测技术在当今社会扮演着重要的角色,不仅在提高安全性和便捷性方面发挥作用,还在促进科技创新和社会发展中具有广泛应用前景。

使用级联函数

OpenCV中提供了级联函数来实现人脸检测:

基本流程

具体流程如下:

函数介绍

在OpenCV中,人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数,它可以检测出图片中所有的人脸。该函数由分类器对象调用,其语法格式为:

objects = cv2.CascadeClassifier.detectMultiScale( image[, scaleFactor[,

 minNeighbors[, flags[, minSize[, maxSize]]]]] )

式中各个参数及返回值的含义为:

  • image:待检测图像,通常为灰度图像。
  • scaleFactor:表示在前后两次相继的扫描中,搜索窗口的缩放比例。
  • minNeighbors:表示构成检测目标的相邻矩形的最小个数。默认情况下,该值为3,意味着有3个以上的检测标记存在时,才认为人脸存在。如果希望提高检测的准确率,可以将该值设置得更大,但同时可能会让一些人脸无法被检测到。
  • flags:该参数通常被省略。在使用低版本OpenCV(OpenCV 1.X版本)时,它可能会被设置为CV_HAAR_DO_CANNY_PRUNING,表示使用Canny边缘检测器来拒绝一些区域。
  • minSize:目标的最小尺寸,小于这个尺寸的目标将被忽略。
  • maxSize:目标的最大尺寸,大于这个尺寸的目标将被忽略。如果maxSize和minSize大小一致,表示仅在一个尺度上查找目标。通常情况下,将该可选参数省略即可。

objects:返回值,目标对象的矩形框向量组。该值是一组矩形信息,包含了每个检测到的人脸所对应矩形框的(x方向位置、y方向位置、宽度、高度)信息。

代码示例

Python实现代码如下:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Sat Feb 17 21:09:07 2024
  4. @author: 李立宗
  5. 公众号:计算机视觉之光
  6. 知识星球:计算机视觉之光
  7. """
  8. import cv2
  9. # ===============1 原始图像处理====================
  10. image = cv2.imread('manyPeople.jpg')
  11. gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
  12. # ================2 加载分类器========================
  13. faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  14. # =================3 人脸检测========================
  15. faces = faceCascade.detectMultiScale(
  16. gray,
  17. scaleFactor = 1.04,
  18. minNeighbors = 18,
  19. minSize = (8,8))
  20. # ===============4 打印输出的实现=====================
  21. print("发现{0}张人脸!".format(len(faces)))
  22. print("其位置分别是:")
  23. print(faces)
  24. # ==================5 标注人脸及显示=======================
  25. for(x,y,w,h) in faces:
  26. cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
  27. cv2.imshow("result",image)
  28. cv2.waitKey(0)
  29. cv2.destroyAllWindows()

检测结果:

具体结果如下:

学习参考
 

理解并实现OpenCV中的图像平滑技术

OpenCV中的边缘检测技术及实现

参考文献

1、OpenCV轻松入门
李立宗,OpenCV轻松入门,电子工业出版社,2023


2、计算机视觉40例
李立宗,计算机视觉40例,电子工业出版社,2022

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/132641?site
推荐阅读
相关标签
  

闽ICP备14008679号