【玩转Python】静态图像人脸检测复盘

本篇推文共计2000个字,阅读时间约3分钟。

01

项目描述

项目描述:

Opencv3的源代码的文件夹中有一个名为haarcascade的文件夹,该文件夹就包括了Opencv用于人脸检测的XML文件,我们可以调用这些文件用于检测静止图像、视频、摄像头中的人脸。

 

当然在PythonOpencv库中也同样存在这样的一个文件夹,我们可以用来实现检测静止图像、视频、摄像头中的人脸。

这个文件在Python库

Lib->site-package->cv2->data文件夹中

从文件名可知,我们可以使用这些xml文件用于人脸、眼镜、鼻子、嘴巴的追踪与检测。

下面我们就来复盘如何利用Python的Opencv实现静态图像人脸检测的demo。

02

项目配置

  • Python3.x

  • OpenCV库

若没有Opencv库
可以通过
pip install opencv-python
指令安装

03

项目流程

整个demo的流程是:

1.首先载入图像;

2.加载图像,处理图像信息,检测人脸位置;

3.最后将检测出来的人脸区域结果输出保存。

导入opencv库

import cv2

导入文件名

filename = 'E:\\demo\\detect\\source.jpg'
#注意此处用的是绝对路径”\\”

定义detect函数,

Detect函数是本文所用到的唯一一个函数,

用于人脸检测。

函数声明了face_cascade变量

该变量为CascadeClassifier对象。负责人脸检测。

face_cascade=cv2.CascadeClassifier('D:\\software\\Anaconda\\Lib\\site-
packages\\cv2\\data\\haarcascade_frontalface_default.xml')

注意此处也需要用绝对路径“\\”

图像转换

加载图像后,需要将图像转换为灰度图像,因为人脸检测需要灰度图像的色彩空间。

img=cv2.imread(filename)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

接下来是进行实际的人脸检测:

faces=face_cascade.detectMultiScale(gray,1.3,5)

传递的参数是scaleFactorminNeighbors,它们分别表示人脸检测过程中每次迭代时图像的压缩率以及每个人脸矩形保留近邻数目的最小值。

 

检测操作的返回值是人脸矩阵数组,函数允许通过坐标来绘制矩形。

  • x和y表示左上角的坐标。

  • w和h表示人脸矩形的宽度和高度。

依次提取faces变量中的值来找到人脸,并在人脸周围绘制蓝色矩形框。

for (x,y,w,h) in faces:
    img=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

创建namedWindow,显示处理后的图像

cv2.namedWindow("看那个码农-静态图像检测")
cv2.imshow('看那个码农-静态图像检测',img)

同时为了避免图像窗口自动关闭,需要加入waitKey函数,这样子按下任意键都可以关闭窗口。

cv2.waitKey(0)

存储输出图像:

cv2.imwrite('E:\\demo\\detect\\end.jpg',img)

完整代码如下:

import cv2

def detect(filename):
    face_cascade=cv2.CascadeClassifier('D:\\software\\Anaconda\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')

    img=cv2.imread(filename)
    gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    faces=face_cascade.detectMultiScale(gray,1.3,5)

    for (x,y,w,h) in faces:
        img=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.namedWindow("看那个码农-静态图像检测")
    cv2.imshow('看那个码农-静态图像检测',img)
    cv2.imwrite('E:\\demo\\detect\\end.jpg',img)
    cv2.waitKey(0)

filename = 'E:\\demo\\detect\\source.jpg'
detect(filename)

04

项目演示

输入图像:

输出结果图像:

往期回顾

【年终总结】你好2021,再见2020。


【快速写好毕业论文】你不得不知晓的七个常用文献搜索平台

【秋招纪实录】一篇特别正经的【腾讯】求职经验分享

【一天一道Leetcode】回文字符串-最少分割次数

【玩转Python】DIY贪吃蛇游戏复盘

【一天一道Leetcode】套信封问题

☆ END ☆

你与世界

只差一个

公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值