因此,我创建了自己的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文件
我的问题是如何在检测循环中使用这个训练好的级联分类器?
Edit: No, not detectMultiScale。我使用级联分类器的原因只是为了加快对非目标的检测,我仍然需要使用我自己的算法来计算可能的ROI得分。很抱歉造成混乱
在Object Detection上的opencv doc之后,您必须创建级联检测器对象并::加载您想要应用的级联(您已经生成的xml文件)。::detectMultiScale用于通过滑动不同尺度和大小的窗口并合并高置信度的接近样本来填充当前帧中被检测对象的std::向量。
代码!
为了使用Cascade Classifier,您必须调用CascadeClassifier::load
函数(将路径作为参数传递给生成的XML文件)。当您想要检查感兴趣的对象是否存在时,您应该调用CascadeClassifier::detect
或CascadeClassifier::detectMultiScale
函数