OpenCV конвертирует Canny ребра в контуры

У меня есть приложение OpenCV, которое подается из потока веб-камеры офисного интерьера (много деталей), где я должен найти искусственный маркер. Маркер представляет собой черный квадрат на белом фоне. Я использую Canny, чтобы найти ребра, и cvFindContours для контурирования, затем приближаю. для фильтрации и поиска кандидатов, а затем использовать локальную гистограмму для дальнейшей фильтрации, бла-бла-бла ...

Это работает более или менее, но не совсем так, как я хочу. FindContours всегда возвращает замкнутый цикл, даже если Canny создает незамкнутую строку. Я получаю контур, идущий по обе стороны линии, образующей петлю. Для закрытых краев на изображении Canny (мой маркер) я получаю 2 контура, один внутри, а другой снаружи. У меня проблемы с этой операцией:

Я получаю 2 контура для каждого маркера (не так серьезно)

самая тривиальная фильтрация непригодна для использования (отбросить незамкнутые контуры)

Поэтому мой вопрос: возможно ли получить незамкнутые контуры для незамкнутых ребер Канни? Или какой стандартный способ решить 2 вышеупомянутых вопроса?

Canny - очень хороший инструмент, но мне нужен способ преобразования 2D-черно-белого изображения во что-то легко обрабатываемое. Что-то вроде подключенных компонентов, перечисляющих все пиксели в порядке следования компонента. Таким образом, я могу отфильтровать петли и передать их в прибл.

Обновление: я пропустил некоторые важные детали: маркер может быть в любой ориентации (это не фронтальная сторона камеры, ни прямые углы), фактически я занимаюсь оценкой 3D-ориентации на основе 2D-проекции маркера.

Ответы на вопрос(3)

Ваш ответ на вопрос