本篇推文共计2000个字,阅读时间约3分钟。
01
项目描述
项目描述:
在Opencv3的源代码的文件夹中有一个名为haarcascade的文件夹,该文件夹就包括了Opencv用于人脸检测的XML文件,我们可以调用这些文件用于检测静止图像、视频、摄像头中的人脸。
当然在Python的Opencv库中也同样存在这样的一个文件夹,我们可以用来实现检测静止图像、视频、摄像头中的人脸。
这个文件在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)
传递的参数是scaleFactor和minNeighbors,它们分别表示人脸检测过程中每次迭代时图像的压缩率以及每个人脸矩形保留近邻数目的最小值。
检测操作的返回值是人脸矩阵数组,函数允许通过坐标来绘制矩形。
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
项目演示
输入图像:
输出结果图像:
往期回顾
☆ END ☆
你与世界
只差一个
公众号