gpt4 book ai didi

c++ - OpenCV:如何使用 HOGDescriptor::detect 方法?

转载 作者:可可西里 更新时间:2023-11-01 15:55:09 26 4
gpt4 key购买 nike

我已成功跟踪视频中的移动物体。 http://ww1.sinaimg.cn/mw690/63a9e398jw1ecn39e3togj20jv0g1gnv.jpg

但是我想确定一个对象是否是人。我在 OpenCV 中尝试了 HOGDescriptor。 HOGDescriptor 有两种检测人的方法:HOGDescriptor::detectHOGDescriptor::detectMultiScale。 OpenCV "sources\samples\cpp\peopledetect.cpp" 演示了如何使用 HOGDescriptor::detectMultiScale ,它以不同的比例在图像周围搜索并且速度非常慢。

在我的例子中,我跟踪了矩形中的对象。我认为使用 HOGDescriptor::detect 检测矩形内部会快得多。但是OpenCV文档只有gpu::HOGDescriptor::detect(我还是猜不出来怎么用)而漏掉了HOGDescriptor::detect。我想使用 HOGDescriptor::detect

谁能给我一些演示 HOGDescriptor::detect 用法的 C++ 代码片段?

谢谢。

最佳答案

因为您已经有了一个对象列表,您可以为所有对象调用 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
}
}

关于c++ - OpenCV:如何使用 HOGDescriptor::detect 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com