Wpis z mikrobloga

W poprzednim wpisie link related pytałem się o najlepszą metodę detekcji obiektów poruszających się na ekranie.

Koniec końców padło na OpenCV i BackgroundSubtratctorMOG(). Efektem mojej pracy jest taki kod:
http://pastebin.com/iz2kd7z5

W dużym skrócie tworzy on instancję tła, którą potem odejmuje od analizowanej klatki. Powstały obraz binarny traktowany jest otwarciem, żeby pozbyć się szumów i zamknięciem (operacje morfologiczne), żeby uwypuklić pozostałe obiekty. Mając grupy takich pikseli są one obrysowywane prostokątami i to obrysowywanie naniesione jest na oryginalny obraz, a w konsoli wyświetla się aktualna liczba znalezionych obiektów.

Przykłady działania
- pobrane tło
- 1 znaleziony obiekt
- 2 znalezione obiekty

Metoda nie jest idealna:
- obiekt może zostać przedzielony przez tło - zostanie wykryty jako dwa obiekty
- obiekt może zlewać się kolorystycznie z tłem przez co nie zostanie wykryty
- grupy poruszających się blisko siebie obiektów zostaną potraktowane jako jeden obiekt

Moje pytanie dotyczy tego ostatniego.

Czy macie jakiś pomysł jak rozwiązać problem obiektów poruszających się blisko siebie?

Pal licho jeżeli są to jednolicie kolorystycznie, różniące się od siebie obiekty, bo wtedy można analizować grupy obiektów po kolorze. Pytanie co jeżeli obiekty są wielokolorowe?

Kod śmiało można kopiować do własnych celów, jest w pełni mój i może ktoś go wykorzysta na zaliczenie lub w swoim projekcie etc. Kod działa na plikach wideo, kamerach USB i streamach internetowych.
#programowanie #opencv #python #sarpensprogramuje
  • 2
Czy macie jakiś pomysł jak rozwiązać problem obiektów poruszających się blisko siebie?


@Sarpens: rozmiar, jeśli chcesz rozpatrywać dwa samochody poruszające się obok siebie z dokładnie tą samą prędkością, a masz stałe położenie kamery - ustawiasz ROI na konkretny pas i tam szukasz obiektu