OpenCV python.

HA
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:1
0

Witajcie, zmagam się z problem rozpoznawania kształtów na obrazie. Korzystam z OpenCV w pythonie.

Wykorzystuje takie funkcje jak findContours. Ale także sprawdzam ilość "załamań" linii, np kwadrat 4, trojkat 3, a koło więcej niż 4.
Jeżeli załamań jest więcej. Porównuje poprzez findMatch z grafiką "przykładową" czy coś jest rogalem. To działa.

Jednak robiąc dokładnie to samo dla "gwiazdki" nie potrafi jej odnaleźć. Problem dodatkowy to problemy z trójkątami. Nie wiem dlaczego szpiczaste obiekty są rozpatrywane nie zawsze w pełni.
Czasami co parę klatek (program działa na wideo na żywo) pokazuje że znalazł trójkąt ale następnie go gubi.
Czy macie jakieś pomysły w jaki sposób mógłbym wykryć bardziej skomplikowane kształty, które przed kamerą mogą znaleźć się w różnej wielkości i różnym kątem obrotu.

Niestety ze względu na podpisaną klauzulę poufności nie mogę zamieszczać kodu.

screenshot-20200817133645.png

PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
1

Skoro nie możesz pokazać kodu to niewiele jesteśmy w stanie pomóc. Praktycznie to zgadywanka - nie wiadomo jak propozycje wpłyną na resztę programu.
Pierwsze, co przychodzi mi do głowy, to lepszy dobór parametrów funkcji, których używasz.


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
DO
  • Rejestracja:ponad 5 lat
  • Ostatnio:4 miesiące
  • Postów:85
0

Tak to niestety jest z image processingiem, że lekkie przesunięcie, zmiana oświetlenia lub jakikolwiek szum potrafią mocno zmienić wynik ;) . Jeżeli tło jest zawsze jednolite, a figury są również wypełnione jednolitym kolorem (tak jak w przykładzie) to spróbowałbym np. wykonać segmentację obrazu, a następnie wycinać prostokątne ramki zawierający dany segment, a następnie za pomocą jakiejś miary porównywać do wzorcowej figury (można użyć np. hashowania).
Oczywiście można użyć bardziej zaawansowanych metod, możesz np. poczytać o punktach kluczowych (SURF, SIFT), jednak nie wiem jak się sprawdzą na takich prostych gładkich kształtach. Dalej to już sieci lokalizacyjne, ale to nie wiem czy chcesz iść aż tak daleko ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.