级联分类器(Cascade Classifier)是一种机器学习技术,通常用于目标检测,特别是人脸检测。最著名的级联分类器之一是Haar级联分类器,它是通过AdaBoost训练得到的强分类器,可以高效地检测目标对象,如人脸,车辆等。
OpenCV提供了一个用于级联分类器的库,其中包括Haar级联分类器和其他类型的级联分类器。以下是一个使用OpenCV进行人脸检测的简单示例,使用了Haar级联分类器:
#include <opencv2/opencv.hpp>
int main() {
cv::CascadeClassifier faceCascade;
if (!faceCascade.load("haarcascade_frontalface_default.xml")) {
std::cerr << "Error loading Haar Cascade classifier." << std::endl;
return -1;
}
cv::VideoCapture cap(0); // 打开摄像头
if (!cap.isOpened()) {
std::cerr << "Cannot open camera." << std::endl;
return -1;
}
cv::Mat frame;
while (true) {
cap >> frame;
std::vector<cv::Rect> faces;
cv::cvtColor(frame, frame, cv::COLOR_BGR2GRAY); // 将图像转换为灰度
faceCascade.detectMultiScale(frame, 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, 0, 255), 2);
}
cv::imshow("Face Detection", frame);
if (cv::waitKey(1) == 27) {
break;
}
}
cap.release();
cv::destroyAllWindows();
return 0;
}
在这个示例中,我们首先加载了Haar级联分类器(人脸检测器),然后从摄像头捕获帧。我们将每一帧转换为灰度图像,然后使用cv::CascadeClassifier
的detectMultiScale
函数来检测人脸。检测到的人脸将以矩形的形式绘制在原始帧上。
需要确保在代码中提供正确的级联分类器文件路径。OpenCV提供了许多不同类型的级联分类器文件,可用于检测不同类型的对象。可以从OpenCV的官方网站或GitHub存储库中找到这些级联分类器文件。
这只是一个人脸检测的简单示例,级联分类器也可以用于检测其他类型的对象。根据你的需求,可以调整级联分类器、参数和图像处理步骤。