OpenCV自带的Haar级联分类器模型:
haarcascade_eye.xml: 这个模型用于检测眼睛。
haarcascade_eye_tree_eyeglasses.xml: 这个模型用于检测眼镜。
haarcascade_frontalcatface.xml: 这个模型用于检测猫脸。 haarcascade_frontalcatface_extended.xml: 这个模型用于扩展的猫脸检测。 haarcascade_frontalface_alt.xml: 这个模型是一个备用的面部检测模型。 haarcascade_frontalface_alt2.xml: 这个模型是另一个备用的面部检测模型。 haarcascade_frontalface_alt_tree.xml: 这个模型是用于面部检测的备用树模型。 haarcascade_frontalface_default.xml: 这个模型是用于面部检测的默认模型。 haarcascade_fullbody.xml: 这个模型用于全身检测。
haarcascade_lefteye_2splits.xml: 这个模型用于检测左眼。 haarcascade_licence_plate_rus_16stages.xml: 这个模型用于检测俄罗斯车牌。 haarcascade_lowerbody.xml: 这个模型用于下半身检测。
haarcascade_profileface.xml: 这个模型用于侧面脸部检测。
haarcascade_righteye_2splits.xml: 这个模型用于检测右眼。 haarcascade_russian_plate_number.xml: 这个模型用于检测俄罗斯车牌号码。 haarcascade_smile.xml: 这个模型用于微笑检测。
这些模型都在安装的opencv-source路径下
人脸检测实例
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/imgproc/imgproc.hpp>
int main()
{
// 加载人脸分类器
cv::CascadeClassifier faceCascade;
//分类器文件下载地址: https://github.com/opencv/opencv/tree/master/data/haarcascades
//在OpenCV的源码目录下其实也有(opencv\build\etc\haarcascades)。
faceCascade.load("C:/haarcascade_frontalface_alt2.xml");
// 打开摄像头
cv::VideoCapture capture(0);
if (!capture.isOpened())
{
std::cout << "无法打开摄像头" << std::endl;
return -1;
}
// 创建窗口
cv::namedWindow("Face Detection", cv::WINDOW_NORMAL);
while (true)
{
cv::Mat frame;
capture >> frame; // 读取视频帧
// 将彩色图像转换为灰度图像以加快处理速度
cv::Mat grayFrame;
cv::cvtColor(frame, grayFrame, cv::COLOR_BGR2GRAY);
// 对图像进行人脸检测
std::vector<cv::Rect> faces;
faceCascade.detectMultiScale(grayFrame, faces, 1.1, 3, 0, cv::Size(30, 30));
// 在图像上绘制人脸边界框
for (size_t i = 0; i < faces.size(); i++)
{
cv::rectangle(frame, faces[i], cv::Scalar(0, 255, 0), 2);
}
// 显示结果图像
cv::imshow("Face Detection", frame);
// 按下ESC键退出循环
if (cv::waitKey(1) == 27)
break;
}
// 释放摄像头和窗口资源
capture.release();
cv::destroyAllWindows();
return 0;
}