我知道完成此任务所需的步骤:
- 收集训练数据集(正向数据集和负向数据集)。
- 对于每个图像提取hog描述符,用于训练SVM(当前的'1'类标签为正向,'-1'类标签为负向)。
- 将训练好的SVM设置到HOGDescriptor中,并使用detect/detectMultiscale方法。
我已经完成了上述所有步骤。但是我困惑的是,HOGDescriptor.detect/detectMultiscale方法检测哪个类别?它只检测正向类别标签(1)吗?
我知道完成此任务所需的步骤:
我已经完成了上述所有步骤。但是我困惑的是,HOGDescriptor.detect/detectMultiscale方法检测哪个类别?它只检测正向类别标签(1)吗?
HOGDescriptor::detectMultiScale()
所做的,它使用多尺度窗口执行对象检测。一旦声明了cv::HOGDescriptor hog
实例,那么SVM分类器的系数也应该被完成:hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
然后detectMultiScale()
执行完整的对象检测(描述符提取和二进制分类),并返回每个候选框的边界框:
std::vector<cv::Rect> found;
hog.detectMultiScale(frame, found, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 2);
detectMultiScale
只返回正样本,但它们可以是真正的正样本(正确识别为人的对象)或假正样本(如汽车、树木等错误地被识别为人)。 - Kornel