I have succeeded in tracking moving objects in a video.
然而我想决定一个物体是否是人。我已经尝试过HOGDescriptor
在 OpenCV 中。 HOGDescriptor 有两种检测人员的方法:HOGDescriptor::detect
, and HOGDescriptor::detectMultiScale
。开放式计算机视觉“来源\样本\cpp\peopledetect.cpp”演示如何使用HOGDescriptor::detectMultiScale
,它以不同的比例搜索图像,并且速度非常慢。
就我而言,我跟踪了矩形中的对象。我认为使用HOGDescriptor::detect
检测矩形的内部会更快。但是OpenCV文档只有gpu::HOGDescriptor::detect
(我还是猜不出如何使用它)并且错过了HOGDescriptor::detect
。我想用HOGDescriptor::detect
.
谁能给我提供一些 C++ 代码片段来演示如何使用HOGDescriptor::detect
?
thanks.
由于您已经有了一个对象列表,因此您可以调用HOGDescriptor::detect
所有对象的方法并检查输出foundLocations
大批。如果它不为空,则该对象被分类为人。唯一的事情是 HOG 与64x128
默认情况下是窗口,因此您需要重新缩放对象:
std::vector<cv::Rect> movingObjects = ...;
cv::HOGDescriptor hog;
hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
std::vector<cv::Point> foundLocations;
for (size_t i = 0; i < movingObjects.size(); ++i)
{
cv::Mat roi = image(movingObjects[i]);
cv::Mat window;
cv::resize(roi, window, cv::Size(64, 128));
hog.detect(window, foundLocations);
if (!foundLocations.empty())
{
// movingObjects[i] is a person
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)