c++中CascadeClassifier
时间: 2024-01-06 15:06:51 浏览: 51
CascadeClassifier是OpenCV中一个用于目标检测的类,它基于Haar特征和级联分类器(Cascade Classifier)进行目标检测。CascadeClassifier可以从训练好的分类器文件中读取数据,然后使用级联分类器对输入图像进行检测,输出检测到的目标的矩形框。
在使用CascadeClassifier进行目标检测时,需要先加载分类器文件,然后使用detectMultiScale函数对输入图像进行检测。detectMultiScale函数会返回一个矩形框数组,每个矩形框表示检测到的目标位置和大小。
以下是一个使用CascadeClassifier进行人脸检测的示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
CascadeClassifier face_cascade;
if (!face_cascade.load("haarcascade_frontalface_alt.xml"))
{
printf("Error loading cascade file!");
return -1;
}
Mat img = imread("test.jpg");
std::vector<Rect> faces;
face_cascade.detectMultiScale(img, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < faces.size(); i++)
{
rectangle(img, faces[i], Scalar(0, 255, 0), 2);
}
imshow("Face detection", img);
waitKey(0);
return 0;
}
```
在上面的示例代码中,我们先加载了一个人脸分类器文件“haarcascade_frontalface_alt.xml”,然后读入一张测试图像。接下来,我们使用detectMultiScale函数对图像进行人脸检测,并将检测到的人脸位置用矩形框标出。最后,我们显示标出矩形框的图像。