OpenCV python.

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

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.

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 ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1