OpenCV convirtiendo bordes Canny a contornos

Tengo una aplicación OpenCV alimentada desde una transmisión de cámara web del interior de una oficina (muchos detalles) donde tengo que encontrar un marcador artificial. El marcador es un cuadrado negro sobre fondo blanco. Utilizo Canny para encontrar bordes y cvFindContours para contornear, luego approxPolyDP y co. para filtrar y encontrar candidatos, luego use el histograma local para seguir filtrando, bla bla bla ...

Esto funciona más o menos, pero no exactamente como quiero. FindContours siempre devuelve un bucle cerrado, incluso si Canny crea una línea no cerrada. Me sale un contorno caminando a ambos lados de la línea formando un bucle. Para los bordes cerrados de la imagen Canny (mi marcador), obtengo 2 contornos, uno en el interior y otro en el exterior. Tengo problemas con esta operación:

Obtengo 2 contornos para cada marcador (no tan serio)

el filtrado más trivial no es utilizable (rechazar contornos no cerrados)

Entonces, mi pregunta: ¿es posible obtener contornos no cerrados para bordes Canny no cerrados? ¿O cuál es la forma estándar de resolver los 2 problemas anteriores?

Canny es una muy buena herramienta, pero necesito una forma de convertir la imagen b / w 2D en algo fácilmente procesable. Algo así como componentes conectados que enumeran todos los píxeles en orden de desplazamiento del componente. Así que puedo filtrar los bucles y alimentarlos en approxPolyDP.

Actualización: me perdí algunos detalles importantes: el marcador puede estar en cualquier orientación (no está frente a la cámara, sin ángulos rectos), de hecho, lo que estoy haciendo es una estimación de orientación 3D, basada en la proyección 2D del marcador.