【发布时间】:2013-11-23 21:13:15
【问题描述】:
大家,我已经在 Opencv 中训练了我自己的分类器,但当我运行它时会得到一种不好的结果。我的目标是使用 Haar 特征作为指导,所以我不想在执行整个级联分类器之后而是在每个步骤中,在每个特征之后查看积极因素。那么,是否可以告诉检测器在该特征处停止,或者我是否必须手动截断包含特征阈值的 xml 文件?谢谢
【问题讨论】:
标签: c++ opencv cascade haar-wavelet
大家,我已经在 Opencv 中训练了我自己的分类器,但当我运行它时会得到一种不好的结果。我的目标是使用 Haar 特征作为指导,所以我不想在执行整个级联分类器之后而是在每个步骤中,在每个特征之后查看积极因素。那么,是否可以告诉检测器在该特征处停止,或者我是否必须手动截断包含特征阈值的 xml 文件?谢谢
【问题讨论】:
标签: c++ opencv cascade haar-wavelet
这是可能的。只需检查CascadeClassifier::detectMultiScale 的工作原理。
在这个功能中你可以查看this->data.stages.size(),它会告诉你级联有多少个阶段。
特别是detectMultiScale调用detectSingleScale,然后它调用CascadeClassifierInvoker的operator(),我们看到那里
int result = classifier->runAt(evaluator, Point(x, y), gypWeight); 行。
因此,如果result 大于零,则表示分类成功并经过所有阶段。
否则(如果我没记错的话)结果将等于-[number of stage] 分类器失败。所以你可以看到确切的阶段分类器没有通过。
此外,如果您使用旧式级联,请注意 detectMultiScale 调用 cvHaarDetectObjectsForROC,而不是 detectSingleScale,但本质上它会做同样的事情。
祝你好运。
是的,这意味着你要修改源代码。
【讨论】: