opencv Игнорировать некоторые объекты в кадре
У меня есть веб-камера на улице, и я хочу отслеживать каждый автомобиль, перемещенный. Переднюю камеру, которую я использовал для этого фона. Подложка, теперь я просто хочу, чтобы идея или метод на opencv помогли мне игнорировать какой-то объект. Я имею в виду отслеживать каждую вещь на улице и игнорировать один объект, его человеческое Я. новый на opencv
что я попробую
Ptr<BackgroundSubtractor> pMOG2;
pMOG2 = createBackgroundSubtractorMOG2();
..... до конца кода
я использую фоновый субстрат, потому что его трек - это все, что движется перед ним, любая идея игнорировать только человека
1 ответ
Что ж, если вы хотите игнорировать объекты людей, вы должны сначала узнать, какие объекты являются людьми, а какие - не людьми.
Обычно, чтобы найти людей в изображении (или видеопотоке), вы используете детектор людей. Вы можете сделать это с HogDescriptor
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
Пример применения дескриптора HOG для обнаружения людей можно найти по адресу opencv_source_code/samples/cpp/peopledetect.cpp
Пример графического процессора с применением дескриптора HOG для обнаружения людей можно найти по адресу opencv_source_code/samples/gpu/hog.cpp
Затем вы можете проверить, являются ли ваши движущиеся объекты людьми или нет, и решить, игнорировать их или нет.
Поскольку вы хотите отслеживать автомобили, более простой подход основан на учете, что человек меньше, чем автомобиль, или что (со ссылкой на ограничивающие рамки) для человека обычно высота больше, чем ширина (обычно человек стоя или гуляя), для машины это наоборот. Вы можете применять простые геометрические ограничения, чтобы игнорировать то, чем должен быть человек.
Вы можете установить максимальную площадь ограничивающего прямоугольника человека в соответствии с разрешением и видом вашей камеры. Давайте назовем это значение области
maxAreaPerson
Затем для каждого движущегося объекта вы получаете ограничивающий прямоугольник (вы, вероятно, уже делаете это, или просто используетеboundingRect(...)
). Если площадь ящика меньшеmaxAreaPerson
Вы игнорируете это.Вместо определения максимальной площади вы можете определить максимальную ширину, высоту, соотношение сторон или их комбинацию.
Вероятно, ваши объекты меньше, если далеко от камеры. Соотношение сторон будет полезно, так как оно не зависит от расстояния до объекта относительно камеры. Или вы можете определить несколько зон в вашем виде (например, рядом с камерой, далеко от камеры, очень далеко от камеры) и определить ограничение для каждой зоны.