各位,我在 Opencv 中训练了自己的分类器,当我运行它时得到了一些不好的结果。我的目标是使用 Haar 功能作为指导,所以我不想在执行整个级联分类器之后而是在每个步骤中,在每个功能之后查看积极因素。那么,是否可以告诉检测器在该特征处停止,或者我是否必须手动截断包含特征阈值的 xml 文件?谢谢
最佳答案
这是可能的。只需检查 CascadeClassifier::detectMultiScale
是如何工作的。
在此函数中,您可以检查 this->data.stages.size()
,它会显示级联中有多少个阶段。
特别是 detectMultiScale
调用了 detectSingleScale
,然后它调用了 CascadeClassifierInvoker
的 operator()
,我们看到那里
int result = classifier->runAt(evaluator, Point(x, y), gypWeight);
行。
因此,如果 result
大于零,这意味着分类成功并经历了所有阶段。
否则(如果我没记错的话)结果将等于 -[阶段数]
分类器失败。所以你可以看到准确的阶段分类器未能通过。
此外,如果您使用旧式级联,请注意 detectMultiScale
调用 cvHaarDetectObjectsForROC
,而不是 detectSingleScale
,但本质上它做同样的事情。
祝你好运。
是的,这意味着您要修改源代码。
关于c++ - 如何在 Haar Cascade 分类过程中查看阳性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19917017/