我知道完成此任务所需的步骤:
我已完成上述所有步骤。我只是感到困惑,HOGDescriptor.detect / detectMultiscale会检测哪个类?它只检测正类标签(1)吗?
答案 0 :(得分:3)
在计算机视觉中,视觉描述符或图像描述符(即HoG)是图像中内容的视觉特征的描述。它们描述了诸如形状,颜色,纹理或运动等基本特征。所以HoG描述符只表征场景 - 在图像中显示,即在街道上行走的行人,你可以在下面看到一个示例HoG描述符(HoG只计算图像局部部分中梯度方向的出现次数):
SVM是一组用于分类,回归和异常值检测的监督学习方法。但最初,SVM是一种用于构建最佳二进制(2类)分类器的技术,因此SVM决定描述符的含义。那么可以说,HoG的输出是SVM的输入,后者的输出是+1或-1。
OpenCV提供了一个隐藏此操作的接口,完整的对象检测可以通过函数调用完成。这是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);