OpenCV detectMultiScale()minNeighbors参数

时间:2014-03-07 12:02:31

标签: opencv object-detection haar-classifier

我目前正在使用Haar分类器来检测物体。 在我的路上,我不明白什么是minNeighbors参数,是什么 它代表什么? 实际上我不明白检测的邻居是什么 候选矩形。任何人都可以定义相邻的想法吗?

2 个答案:

答案 0 :(得分:67)

Haar级联分类器使用滑动窗口方法。如果您查看级联文件,您可以看到一个大小参数,通常是一个非常小的值,如20 20.这是级联可以检测到的最小窗口。因此,通过应用滑动窗口方法,您可以将窗口滑过图片而不是调整大小,然后再次搜索,直到无法进一步调整大小。因此,每次迭代都会存储haar的级联分类器真实输出。所以当这个窗口被滑动时,图片会重新调整大小并再次滑动;它实际上检测到许多误报。您可以通过提供 minNeighbors 0 来检查检测到的内容。这是一个例子:

minNeighbors = 0

因此,由于调整滑动窗口的大小以及大量的误报,因此会有很多人脸检测。因此,为了消除误报并从检测中获得正确的面矩形,应用邻域方法。就像它在其他矩形附近而不是它可以,你可以进一步传递它。因此,此数字决定了将其作为面矩形传递所需的邻域数。在 1 的同一张图片中:

minNeighbors = 1

因此,通过增加这个数字你可以消除误报,但要小心,通过增加它你也可以失去真正的积极因素。当它 3 时,一个完美的结果:

minNeighbors = 3

答案 1 :(得分:8)

来自OpenCV documentation

  

minNeighbors - 参数指定每个候选矩形应保留多少个邻居。

换句话说,此参数将影响检测到的面部的质量。值越高,检测越少,但质量越高。

此参数背后的想法是检测器将以多尺度样式运行,同时遵循滑动窗口策略。完成此步骤后,即使是单个面部区域,它也会为您提供多个响应。此参数倾向于过滤这些响应,就像设置下限阈值一样,即如果此面部的响应数高于minNeighbors,它将仅计为有效面。


要了解CascadeClassifier::detectMultiScale的其他参数,请查看我之前回答的this post