所以,我创建了自己的HoG特征提取器和一个简单的滑动窗口算法,伪代码看起来像这样:
for( int i = 0; i < img.rows; i++ ) {
for( int j = 0; j < img.cols; j++ ) {
extract image ROI from the current position
calculate features for the ROI
feed the features into svm.predict() function, to determine whether it's human or not
}
}
然而,因为它非常慢(特别是当你包含不同的音阶时),我决定在我的正面和负面样本上使用openv_traincascade命令训练一些级联分类器。
opencv_traincascade为我提供了cascade.xml,params.xml和一些stage.xml文件
我的问题是如何在检测循环中使用这种经过训练的级联分类器?
修改:不,不是detectMultiScale。我使用级联分类器的原因只是为了加快非对象的检测,我仍然需要使用我自己的算法来计算可能的ROI的得分。对不起困惑
答案 0 :(得分:2)
关于对象检测的opencv doc之后,您必须创建级联检测器对象并::加载要应用的级联(您生成的xml文件)。 :: detectMultiScale用于通过滑动不同比例和大小的窗口并合并高度自信的近似样本,从当前帧填充检测到的对象的std :: vector。
答案 1 :(得分:1)
为了使用级联分类器,您必须调用CascadeClassifier::load
函数(将生成的XML文件的路径作为参数传递)。无论何时您想检查感兴趣的对象是否存在,您都应该调用CascadeClassifier::detect
或CascadeClassifier::detectMultiScale
函数。