opencv忽略框架上的某个对象

时间:2015-07-19 15:02:42

标签: c++ opencv

我在街上有网络摄像头,我想跟踪每辆车移动的盈方相机 我用于这个背景Substration 现在我只想在opencv上的想法或方法帮助我忽略一些对象 我的意思是跟踪街道上的每件事情,忽略一个人物的对象 我刚接触opencv

我尝试了什么

Ptr<BackgroundSubtractor> pMOG2;
pMOG2 = createBackgroundSubtractorMOG2();

.....到代码的结尾

我使用背景Substration因为它跟踪每一件东西都在前面移动它 任何忽视人类的想法

1 个答案:

答案 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,则忽略它。

  • 您可以定义最大宽度,高度,宽高比或它们的组合,而不是定义最大区域。

  • 如果远离相机,您的物体可能会更小。宽高比会很有用,因为它不受物体相对于相机的距离的影响。或者您可以在视图中定义几个区域(例如,靠近摄像机,远离摄像机,距摄像机很远)并为每个区域定义约束。