我在街上有网络摄像头,我想跟踪每辆车移动的盈方相机 我用于这个背景Substration 现在我只想在opencv上的想法或方法帮助我忽略一些对象 我的意思是跟踪街道上的每件事情,忽略一个人物的对象 我刚接触opencv
我尝试了什么
Ptr<BackgroundSubtractor> pMOG2;
pMOG2 = createBackgroundSubtractorMOG2();
.....到代码的结尾
我使用背景Substration因为它跟踪每一件东西都在前面移动它 任何忽视人类的想法
答案 0 :(得分:0)
好吧,如果你想忽略人物,你首先应该知道哪些物体是人物,哪些物体不是人物。
通常,为了在图像(或视频流)中查找人物,您需要使用人物检测器。您可以使用HogDescriptor
执行此操作HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
可以在opencv_source_code / samples / cpp / peopledetect.cpp中找到应用HOG描述符进行人员检测的示例
可以在opencv_source_code / samples / gpu / hog.cpp中找到应用HOG描述符进行人员检测的GPU示例
然后,您可以检查您的移动物体是否是人,并决定是否忽略它们。
由于您想跟踪汽车,因此更简单的方法是基于一个人小于汽车的考虑因素,或者(参考他们的边界框)对于一个人的考虑通常高度大于宽度(通常一个人站立或行走),对于汽车来说是另一种方式。您可以应用简单的几何约束来忽略应该是什么人。
您可以根据相机的分辨率和视图设置人物边界框的最大区域。让我们调用此区域值maxAreaPerson
然后,对于每个移动对象,您将获得边界框(您可能已经这样做了,或者只使用boundingRect(...)
)。如果框区域小于maxAreaPerson
,则忽略它。
您可以定义最大宽度,高度,宽高比或它们的组合,而不是定义最大区域。
如果远离相机,您的物体可能会更小。宽高比会很有用,因为它不受物体相对于相机的距离的影响。或者您可以在视图中定义几个区域(例如,靠近摄像机,远离摄像机,距摄像机很远)并为每个区域定义约束。