OpenCV convertendo bordas de Canny em contornos

Eu tenho um aplicativo OpenCV alimentado a partir de um fluxo de webcam de um interior de escritório (muitos detalhes) onde eu tenho que encontrar um marcador artificial. O marcador é um quadrado preto sobre fundo branco. Eu uso Canny para encontrar bordas e cvFindContours para contorno, em seguida, aproxPolyDP e co. para filtrar e encontrar candidatos, use histograma local para filtrar ainda mais, bla bla bla ...

Isso funciona mais ou menos, mas não exatamente como eu quero. FindContours sempre retorna um loop fechado, mesmo que Canny crie uma linha não fechada. Eu tenho um contorno andando em ambos os lados da linha formando um loop. Para bordas fechadas na imagem de Canny (meu marcador), recebo dois contornos, um no lado de dentro e outro no lado de fora. Eu tenho que problemas com esta operação:

Eu recebo 2 contornos para cada marcador (não tão sério)

a filtragem mais trivial não é utilizável (rejeite contornos não fechados)

Então, minha pergunta: é possível obter contornos não fechados para bordas não-fechadas de Canny? Ou qual é a maneira padrão de resolver os 2 problemas acima?

O Canny é uma ferramenta muito boa, mas eu preciso de uma maneira de converter a imagem 2D p / b em algo facilmente processável. Algo como componentes conectados listando todos os pixels na ordem de pé do componente. Então eu posso filtrar loops e alimentá-lo em approxPolyDP.

Atualização: Eu perdi alguns detalhes importantes: o marcador pode estar em qualquer orientação (não está de frente para a câmera, sem ângulos retos), na verdade o que estou fazendo é a estimativa de orientação 3D, baseada na projeção 2D do marcador.