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