最近,我一直在训练一个用于人脸检测的OpenCV级联,我意识到同一个级联正在为同一个图像返回不同的检测。
您可以找到我用来测试级联here的图片。
这是我测试探测器的代码:
Mat image1 = imread("path/to/image/021aa138-def8-44d4-8485-7a4735e11acb.jpg", CV_8UC3);
Mat image2 = imread("path/to/image/021aa138-def8-44d4-8485-7a4735e11acb.jpg", CV_8UC3);
CascadeClassifier cascade;
cascade.load("path/to/cascade/cascade_15.xml");
std::vector<Rect> rects1, rects2;
cascade.detectMultiScale(image1, rects1, 1.1, 3, 0, Size(20, 20), Size(150, 150));
cascade.detectMultiScale(image2, rects2, 1.1, 3, 0, Size(20, 20), Size(150, 150));
for (auto rect = rects1.begin(); rect != rects1.end(); rect++)
{
cv::rectangle(image1, *rect, Scalar(0, 255, 0));
}
for (auto rect = rects2.begin(); rect != rects2.end(); rect++)
{
cv::rectangle(image2, *rect, Scalar(0, 255, 0));
}
imshow("Image 1", image1);
waitKey(0);
imshow("Image 2", image2);
waitKey(0);
我用来训练级联的参数:
opencv_traincascade.exe -data data -vec training_20x20_full_44010.vec -bg gt_neg.data -w 20 -h 20 -maxWeakCount 1000 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -mode ALL -numPos 5000 -numNeg 10000 -numStages 15
可以看到检测输出here。
正如大家所见,我正在加载相同的图像并使用相同的参数应用相同的级联,但每次运行代码时我都会获得不同的输出。另一个奇怪的事情是,当我应用一些原始的OpenCV级联( haarcascades_frontalface _ * .xml )时,我总是得到相同的检测。
其他人之前也遇到过这个问题吗?
提前致谢。