Ho un'applicazione OpenCV alimentata da un flusso di webcam dell'interno di un ufficio (molti dettagli) dove devo trovare un marker artificiale. Il marcatore è un quadrato nero su sfondo bianco. Uso Canny per trovare bordi e cvFindContours per il contouring, quindi approxPolyDP e co. per filtrare e trovare candidati, quindi utilizzare l'istogramma locale per filtrare ulteriormente, bla bla bla ...Conversione OpenCV Bordi Canny ai contorni
Questo funziona più o meno, ma non esattamente come voglio. FindContours restituisce sempre un ciclo chiuso, anche se Canny crea una linea non chiusa. Prendo un contorno che cammina su entrambi i lati della linea formando un anello. Per i bordi chiusi nell'immagine Canny (il mio marker), ottengo 2 contorni, uno all'interno e uno all'esterno. devo problemi con questa operazione:
ottengo 2 contorni per ciascun marcatore (non così grave)
il filtraggio più banale non è utilizzabile (rifiuto non chiuso contorno)
Quindi la mia domanda: è possibile ottenere contorni non chiusi per bordi Canny non chiusi? O qual è il modo standard per risolvere i 2 problemi di cui sopra?
Canny è uno strumento molto valido, ma ho bisogno di convertire l'immagine b/n 2D in qualcosa di facilmente processabile. Qualcosa come i componenti collegati che elencano tutti i pixel in ordine di marcia del componente. Quindi posso filtrare i loop e inserirli in approxPolyDP.
Aggiornamento: Ho perso alcuni dettagli importanti: il marcatore può essere in qualsiasi orientamento (non è rivolto verso la fotocamera, senza angoli retti), infatti quello che sto facendo è la stima dell'orientamento 3D, basata sulla proiezione 2D di il marcatore
Non sono davvero d'accordo con la modifica, dato che findContours() e drawContours() non operano necessariamente sulla stessa immagine, a meno che non si voglia immediatamente eliminare il cestino contorno immagine da sovrascrivere. La modifica ha anche rimosso le informazioni che l'input di findContours() proviene da Canny(). –