Обнаружение центра движущегося животного в видео с использованием OpenCV - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь определить центр движущегося животного в коротком видео. Фон видео статичен - внутри лаборатории, но не плоский (то есть это не просто одноцветный фон, вокруг есть объекты, и я не могу это контролировать. Но фон не меняется),Само животное также не является однотонным животным, поэтому я не могу просто искать определенный диапазон цветов в видео.

Я использую OpenCV 4.1 и NumPy с Python 3.7 и пытаюсь использоватьсочетание различных примеров, которые вы можете найти в Интернете. До сих пор кажется, что лучший выбор - использовать методы библиотеки Optical Flow (пожалуйста, исправьте меня, если у вас есть идея получше, я сначала попытался использовать absdiff, пытаясь нарисовать простой прямоугольник над животным, как показано на многих пешеходах). - примеры обнаружения в Интернете, но тело животного не плоское - у него есть хвост - и был шум, это не нарисовало один прямоугольник, покрывающий все животное, но несколько выстрелов, которые не помогли моей цели).

Используя последний пример, показанный здесь: https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html Мне удалось получить черную рамку с цветными пикселями над формой движущегося животного (в значительной степени скопировал код из примера кода Dense Optical Flow). И это работает довольно хорошо, вокруг немного шума, но ничего страшного.

Поэтому я подумал, что просто проверю полученное изображение (переменная bgr в приведенном выше примере) и проверим нечерные пиксели, соберите их и найдите среднее значение в качестве центра. Проблема в том, что получается, хотя я вижу только цветные пиксели вокруг фигуры животного, есть много не черных пикселей, которые я не вижу. Возможно, я просто обнаруживаю их неправильно:

non_black_pixels = np.any(bgr != [0,0,0], axis=-1)
black_pixels = np.all(bgr == [0,0,0], axis=-1)

Это, кажется, занимает вечность (около 40-60 секунд) и находит много и много не черных пикселей. Так что либо я смотрю на все это неправильно, либо это не то, что я должен делать.

Похоже, поскольку очень простой пример кода с плотным оптическим потоком заставил меня довольно быстро нарисовать цветную фигуру вокругперемещение животного, найти его центр не должно быть очень сложным.

Моя конечная цель - провести последовательную линию центра движущегося животного между кадрами. И, очевидно, используйте эти пиксели, которые представляют линию позже (я хотел бы знать центр животного в каждом кадре).

Мне бы хотелось несколько идей о том, как подойти к этому. Заранее спасибо!

...