OpenCV konwertuje krawędzie Canny'ego na kontury
Mam aplikację OpenCV zasilaną ze strumienia kamery z wnętrza biura (wiele szczegółów), gdzie muszę znaleźć sztuczny znacznik. Znacznik to czarny kwadrat na białym tle. Używam Canny do znajdowania krawędzi i cvFindContours do konturowania, a następnie approxPolyDP i co. do filtrowania i znajdowania kandydatów, a następnie użyj lokalnego histogramu do dalszego filtrowania, bla bla bla ...
To działa mniej więcej, ale nie dokładnie tak, jak chcę. FindContours zawsze zwraca zamkniętą pętlę, nawet jeśli Canny tworzy linię niezamkniętą. Dostaję kontur po obu stronach linii, tworząc pętlę. W przypadku zamkniętych krawędzi na obrazie Canny (mój znacznik) otrzymuję 2 kontury, jeden na wewnętrznej i drugi na zewnątrz. Muszę mieć problemy z tą operacją:
Dostaję 2 kontury dla każdego markera (nie tak poważne)
najbardziej trywialne filtrowanie nie jest użyteczne (odrzuć niezamknięte kontury)
Moje pytanie: czy możliwe jest uzyskanie niezamkniętych konturów dla niezamkniętych krawędzi Canny'ego? Lub jaki jest standardowy sposób rozwiązania powyższych 2 problemów?
Canny jest bardzo dobrym narzędziem, ale potrzebuję sposobu przekonwertowania obrazu 2D b / w na coś, co można łatwo przetworzyć. Coś w rodzaju połączonych komponentów z listą wszystkich pikseli w porządku chodzenia komponentu. Mogę więc filtrować pętle i przekazywać je do approxPolyDP.
Aktualizacja: Brakowało mi jakiegoś ważnego szczegółu: znacznik może być w dowolnej orientacji (nie jest zwrócony przodem do kamery, nie ma kątów prostych), w rzeczywistości to, co robię, to oszacowanie orientacji 3D na podstawie projekcji 2D znacznika.