目录
一、引言
在OpenCV(Open Source Computer Vision Library)的目录中的data文件夹中,通常包含了一些预训练的XML文件,这些文件用于不同的计算机视觉任务,如面部检测、对象识别、人眼检测等。这些XML文件包含了模型的训练数据和配置信息,可以被用于加载训练好的机器学习模型,以便在你的应用程序中执行各种计算机视觉任务。
二、介绍
1、haarcascade_frontalface_default.xml:用于检测图像中的人脸。
2、haarcascade_eye.xml:用于检测图像中的眼睛。
3、haarcascade_smile.xml:用于检测笑容。
4、haarcascade_upperbody.xml: 用于检测图像中的上半身部分,包括头和肩膀。
5、haarcascade_fullbody.xml:用于检测整个身体。
6、lbpcascade_frontalface.xml:也用于检测人脸,采用了不同的级联分类器(Local Binary Pattern)。
7、haarcascade_eye_tree_eyeglasses.xml:用于检测带眼镜的眼睛。
8、haarcascade_frontalcatface.xml:用于检测猫的脸部。
9、haarcascade_frontalcatface_extended.xml:用于识别猫的面部特征,包括猫的眼睛、鼻子和嘴巴等。
10、haarcascade_frontalface_alt.xml:用于检测图像中的人脸。
11、haarcascade_frontalface_alt2.xml:用于检测图像中的人脸。
12、haarcascade_frontalface_alt_tree.xml:用于识别人的面部特征,包括人的眼睛、鼻子和嘴巴等。
13、haarcascade_lefteye_2splits.xml:用于检测图像或视频流中的左眼。
14、haarcascade_licence_plate_rus_16stages.xml:用于检测图像或视频帧中的车牌,特别是俄罗斯车牌。
15、haarcascade_lowerbody.xml:可以识别与下半身相关的模式和特征,通常包括腹部和臀部区域。
16、haarcascade_profileface.xml:用于检测图像或视频流中的配置文件人脸。
17、haarcascade_righteye_2splits.xml:检测图像或视频流中的右眼。
18、haarcascade_russian_plate_number.xml:用于检测俄罗斯车牌。
三、代码实现(举例:检测猫的脸部)
objects = cv2.CascadeClassifier.detectMultiScale( image[,scaleFactor
[,minNeighbors[, flags[, minSize[,maxSize]]]]] )
其中,各个参数及返回值的含义如下。
·image:待检测图像,通常为灰度图像。
·scaleFactor:表示在前后两次相继扫描中搜索窗口的缩放比例。识别,扫描,按照不同比例来进行扫描
·minNeighbors:表示构成检测目标的相邻矩形的最小个数。在默认情况下,该参数的值为 3,
表示有 3 个以上的检测标记存在时才认为存在猫脸。如果希望提高检测的准确率可以将该参数的值设置得更大,
但这样做可能会让一些猫脸无法被检测到。
flags: 该参数通常被省略。在使用低版本 OpenCV (OpenCV 1.X 版本)时,该参数可能会被设置为
CV_HAAR_DO_CANNY_PRUNING,表示使用 Canny 边缘检测器拒绝一些区域。
·minSize: 目标的最小尺寸,小于这个尺寸的目标将被忽略。
·maxSize: 目标的最大尺寸,大于这个尺寸的目标将被忽略。通常情况下,将该可选参数省略即可。
若 maxSize 和 minSize 大小一致,则表示仅在一个尺度上查找目标。
·objects: 返回值,目标对象的矩形框向量组。该值是一组矩形信息,
包含每个检测到的猫脸对应的矩形框的信息 (x轴方向位置、y轴方向位置、宽度、高度)。
import cv2 #导入所需要的库
#将图片读取为灰度图片
image = cv2.imread('cat(1).jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 创建包含分类器参数的经过训练的 XML 文件的实例并加载该文件。
faceCascade = cv2.CascadeClassifier('haarcascade_frontalcatface.xml')
# 执行人脸检测
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.02, minNeighbors=20, minSize=(8, 8))
在检测到的人脸周围绘制矩形
for i, (x, y, w, h) in enumerate(faces):
rect = cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 3)
cv2.imshow("rect", rect)
cv2.waitKey(0)
代码运行结果:
四、总结
这些XML文件包含了用于检测特定目标的级联分类器的信息。你可以使用OpenCV库中的类来加载这些XML文件并将它们应用于图像。这允许你在图像中识别人脸、眼睛、笑容等。