当前位置: 首页 > news >正文

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方向位置、宽度、高度)信息。

代码示例

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

检测结果:

学习参考
 

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

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

参考文献

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


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

http://www.lryc.cn/news/301215.html

相关文章:

  • VOSK——离线语音库
  • ELAdmin 隐藏添加编辑按钮
  • 浅谈Websocket
  • JavaScript闭包详细介绍
  • pytorch神经网络入门代码
  • 代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
  • Ditto:提升剪贴板体验的宝藏软件(复制粘贴效率翻倍、文本处理好助手)
  • 【自然语言处理-工具篇】spaCy<2>--模型的使用
  • Java之通过Jsch库连接Linux实现文件传输
  • Nginx七层负载均衡之动静分离
  • 305_C++_定义了一个定时器池 TimerPool 类和相关的枚举类型和结构体
  • 大整数因数分解工具——yafu
  • 非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解
  • 7.Cloud-GateWay
  • 【Linux】Framebuffer 应用
  • markdown绘制流程图相关代码片段记录
  • 云计算基础-计算虚拟化-CPU虚拟化
  • MySQL数据库⑪_C/C++连接MySQL_发送请求
  • 选择排序和快速排序(1)
  • 得物面试:Redis用哈希槽,而不是一致性哈希,为什么?
  • matlab发送串口数据,并进行串口数据头的添加,我们来看下pwm解析后并通过串口输出的效果
  • 二分、快排、堆排与双指针
  • 微信小程序步数返还的时间戳为什么返回的全是1970?
  • Python函数——函数介绍
  • 【Linux系统化学习】文件重定向
  • 防火墙工作模式详解
  • CCF编程能力等级认证GESP—C++6级—20231209
  • ES6 ~ ES11 学习笔记
  • 001 - Hugo, 创建一个网站
  • 前端开发:Vue框架与前端部署