OpenCV/Python3 简易人脸检测
推荐使用Jupyter Notebook
- 引入库文件
import cv2
import matplotlib.pyplot as plt
import numpy as np
- 定义辅助函数(读取图像函数,显示图像函数)
"""
# 显示图像
# image 要显示的图像
"""
def showImg(image):
plt.imshow(image)
plt.show()
"""
# 读取图像并转换通道
# image 要读取的图像的路径
"""
def readImg(image):
image = cv2.imread(image)
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
return image
- 主要函数(人脸检测函数)
"""
# 人脸检测
# image 需要检测的图像
"""
def faceDetection(image):
image = readImg(image)
showImg(image)
# 级联分类器(文尾下载)
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
'''
# 探测器
# 参数说明:
# image 传入的图像
# scaleFactor=1.1 每次缩小图像的比例,默认是1.1
# minNeighbors=3 匹配成功所需要的周围矩形框的数目
每一个特征匹配到的区域都是一个矩形框,只有多个矩形框同时存在的时候,才认为是匹配成功,默认值是3。
# minSize=(10,10) 匹配人脸的最小范围
# flags=2
cv2.CASCADE_DO_CANNY_PRUNING = 1 利用canny边缘检测来排除一些边缘很少或者很多的图像区域
cv2.CASCADE_SCALE_IMAGE = 2 正常比例检测
cv2.CASCADE_FIND_BIGGEST_OBJECT = 4 只检测最大的物体
cv2.CASCADE_DO_ROUGH_SEARCH = 8 粗略的检测
'''
rects = detector.detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, minSize=(10,10), flags=2)
'''
# 画出矩形
# image 需要画框的图像
# (x,y) 启始坐标(左上角)
# (x+width,y+height) 结束坐标(左下角)
# (0,255,0) 矩形框颜色(绿色)
# 5 矩形框宽度
'''
for(x,y,width,height) in rects:
cv2.rectangle(image,(x,y),(x+width,y+height),(0,255,0),5)
showImg(image)
- 循环传入测试图像获得结果
for i in range(4):
print('test' + str(i) + '.jpeg')
faceDetection('test' + str(i) + '.jpeg')
-
级联分类器下载地址
链接:https://pan.baidu.com/s/1xQd4Tdu24fZ3MEEEM62f4w 密码:vnq7
推荐使用Jupyter Notebook