OpenCV级联为同一图像返回不同的检测

时间:2017-01-30 18:31:05

标签: c++ opencv detection cascade

最近,我一直在训练一个用于人脸检测的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 )时,我总是得到相同的检测。

其他人之前也遇到过这个问题吗?

提前致谢。

0 个答案:

没有答案