OpenCV中未记录的Group矩形变量

OpenCV中未记录的Group矩形变量,opencv,Opencv,在OpenCV中的cascadedetect.cpp中,有几个groupRectangles函数的变体: void groupRectangles(std::vector<Rect>& rectList, int groupThreshold, double eps); void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& weights, int gro

在OpenCV中的cascadedetect.cpp中,有几个
groupRectangles
函数的变体:

void groupRectangles(std::vector<Rect>& rectList, int groupThreshold, double eps);
void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& weights, int groupThreshold, double eps);
void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& rejectLevels, std::vector<double>& levelWeights, int groupThreshold, double eps);
void-group矩形(std::vector&rectList,int-groupThreshold,double-eps);
void group矩形(std::vector和rectList、std::vector和weights、int groupThreshold、double-eps);
void group矩形(std::vector和rectList、std::vector和rejectLevels、std::vector和levelWeights、int groupThreshold、double eps);
但在中,只有第一个变量被清楚地记录,第二个变量被提及,但没有解释
权重
参数。第三个甚至没有提到


谁能解释一下
权重
拒绝级别
级别权重
的含义吗?

我阅读了
组矩形
源代码,并在一定程度上理解了这些参数的含义

groupRectangles
在cascadedetest.cpp中定义,该文件由OpenCV中的traincascade项目使用。该项目使用viola jones的级联adaboost框架来检测对象,因此它有几个级联阶段,每个阶段都是一个强分类器。默认情况下,级联分类器仅在输入样本通过每个阶段时输出正值,但如果要绘制ROC曲线,还可以将其设置为输出样本被拒绝的阶段索引

因此,
rejectLevels
表示矩形被拒绝的阶段的索引。根据源代码,
权重
的效果与
拒绝级别
的效果相同

上述两个参数对我们来说可能不太实用,但
levelWeights
有时很有用。它最初是拒绝它的stage输出的矩形的分数,但我们可以将其用于更一般的用途。如果每个矩形都有一个分数(无论它来自何处),并且我们想要得到分组矩形的分数,那么
groupRectangles
的文档化变体将不会帮助我们。我们必须使用第三个选项,将
拒绝级别
设置为零:

vector<int> levels(wins.size(), 0);
groupRectangles(wins, levels, scores, groupThreshold, eps);
向量级别(wins.size(),0); 组矩形(赢、级别、分数、组阈值、每股收益);
其中
得分
获胜
的得分。它们的尺寸一样。

太棒了!你能解释一下参数“eps”是什么意思吗?谢谢。@BonderWu,参数“eps”在中有解释。