- 帖子
- 22
- 精华
- 0
- 积分
- 75
- 阅读权限
- 20
- 注册时间
- 2018-3-31
- 最后登录
- 2018-4-17
|
import cv2
face_patterns = cv2.CascadeClassifier('D:\Learning_Software\Opencv\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml') #加载分类器 cv2.CascadeClassifie
'''
CascadeClassifier是Opencv中做人脸检测时候的一个级联分类器,该类中封装的是目标检测机制即滑动窗口机制+级联分类器的方式。
数据结构包括Data和FeatureEvaluator两个主要部分。Data中存储的是从训练获得的xml文件中载入的分类器数据;而FeatureEvaluator中是关于特征的载入、存储和计算。
这里采用的训练文件是OpenCV中默认提供的haarcascade_frontalface_default.xml
'''
# face_patterns.load('D:\Learning_Software\Opencv\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')
sample_image = cv2.imread('2.jpg') #加载目标图片 imread
faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(100, 100)) # 多尺度检测 detectMultiScale
'''
调用 CascadeClassifier 中的调detectMultiScale函数进行多尺度检测,多尺度检测中会调用单尺度的方法detectSingleScale。
参数说明:
scaleFactor 是 图像的缩放因子
minNeighbors 为每一个级联矩形应该保留的邻近个数,可以理解为一个人周边有几个人脸
minSize 是检测窗口的大小
参数都是可以针对图片进行调整的,处理结果返回一个人脸的 矩形对象列表。
'''
for (x, y, w, h) in faces:
(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
'''
为每个人脸画一个框
循环读取人脸的矩形对象列表,获得人脸矩形的坐标和宽高, 然后在原图片中画出该矩形框,调用的是OpenCV的rectangle 方法,其中矩形框的颜色等是可调整的。
'''
cv2.imwrite('2_detected.png', sample_image); #保存检测后的结果
我用一张图片可以检测并且有矩形框,但是换了几张都不行了 是怎么回事?
|
|