OpenCV中,提供了三种级联分类器--- Haar级联分类器,Hog特征和LBP算法的级联分类器。
为了训练针对特定类型对象的级联分类器, OpenCV提供了专门的工具, build/x86/vc12/bin目录下,有opencv_createsamples.exe, opencv_traincascade.exe。
1. 训练过程:
2. 使用级联分类器:
可以使用opencv中一些训练好的级联分类器。这些分类器可以用来检测人脸,脸部特征(眼睛,鼻子),人体和其它物体。他们放在opencv/data目录。
包含
haarcascades, hogcascades, lbpcascades,haarcascades_cuda等。
2.1:使用介绍:
2.1.1:加载级联分类器:
filename:级联分类器的路径和名称。
产生一个级联分类器object.
这里曾出过一个问题:
直接下载github中opencv 官方模型如:haarcascade_frontalcatface.xml。 加载时会报错:
SystemError:
后来下载OpenCV整个Source Code,指定filename到对应xml文件,则正常了。没太搞清楚是怎么回事。
2.1.2:检测目标:
| cv.CascadeClassifier.detectMultiScale( | image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]] | ) -> | objects |
用来检测输入image中是否有目标。
参数:
image: 待检测图像。 通常为灰度图。
scaleFactor: 前后两次扫描中, 搜索窗口的缩放比例。 缺省为1.1
minNeighbors:检测目标的相邻矩形的最小个数。缺省为3. 表示有3个以上的检测标记存在时,才认为目标存在。如果希望提高精准率,则可以提高这个值。
minSize: 目标的最小尺寸。小于这个尺寸的目标被忽略。
maxSize:目标的最大尺寸。大于这个尺寸的目标被忽略。
返回值:
objects:
as a list of rectangles
返回值是个ndarray. shape: (N, 4)
每一行是一个rectangle: x, y, w, h
实例:
import cv2
import numpy as np
import sys
def face_detector(img):
face_detect = cv2.CascadeClassifier(r"E:currentsvn_pythonOpenCV_Studyopencvopencv_opencvdatahaarcascadeshaarcascade_frontalface_alt.xml")
face_detect = cv2.CascadeClassifier(
r"models/haarcascade_frontalface_default.xml")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detect.detectMultiScale(gray)
print(type(faces[0]))
print(faces.shape)
# print(faces)
for x, y, w, h in faces:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,0,255), 2)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def face_pixelated(file_name):
img = cv2.imread(file_name, cv2.IMREAD_COLOR)
if (img is None):
print("Read File Error.")
sys.exit()
face_detector(img)
if __name__ == "__main__":
face_pixelated("images/ab.jpeg")


