Domanda

Ho caricato un'immagine di esempio per una migliore comprensione: http://www.imagebanana.com/view/kaja46ko/test.jpg

Nell'immagine è possibile vedere alcune linee di scansione e un marcatore (il parto bianco con il cerchio in esso). Voglio che OpenCV proceda lungo un'area specificata (nell'esempio descritto con le linee di scansione) che dovrebbe essere intorno a 5x5. Se quell'area contiene un gradiente dal nero al bianco, voglio che OpenCV salva la posizione di quell'area, in modo che io possa lavorarci in seguito.

Il risultato finale sarebbe quello di distinguere tra il marcatore e gli altri rivenditori separati da sole in bianco e nero.

È possibile qualcosa di simile? Ho cercato su Google, ma ho trovato solo i rilevatori di bordi ma non è quello che voglio, ho davvero bisogno del rilevamento del gradiente nero a bianco.

Grazie in anticipo.

È stato utile?

Soluzione 2

Grazie per il tuo risposta Dnul, ma non mi ha davvero aiutato a risolverlo. Ho pensato a un istogramma per affrontare il problema, ma non è proprio quello che voglio.

Ho risolto questo problema creando una matrice 40x40 che contiene la matrice 5x5 contenente i dati pixel grezzi in tutti e 3 i canali. Ho trascorso una depressione ogni 40px e all'interno della depressione iterata ogni bordo dell'area 5px. Ho controllato ogni pixel e ho salvato quelli che sono più scuri, quindi una certa soglia un archiviazione.

Dopo l'iterazione ho avuto un'idea approssimativa di quanti pixel neri sono, quindi ho controllato ognuno di loro per i vicini con pixel bianchi in tutti e 3 i canali. Ho quindi segnato ciascuno di quei pixel e li ho salvati in un altro spazio di archiviazione.

Ho quindi usato l'algoritmo Ransac per costruire linee da questi punti. Costruisce circa 5-20 righe per bordo marcatore. Ho quindi guardato le linee che si incontrano e ho salvato la posizione di quelle che si incontrano in un angolo quadrato. I 4 punti che ottengo da quelli sono i bordi del marcatore.

Se vuoi riprodurlo, dovresti filtrare in anticipo l'immagine e applicare una soglia per rendere più facile distinguere tra pixel in bianco e nero.

Un'immagine di esempio, salva dopo aver trovato i punti e prima di costruire le righe:http://www.imagebanana.com/view/i6gfe6qi/9.jpg

Altri suggerimenti

Sarebbe una buona idea filtrare alcune aree calcolando il loro istogramma. È possibile utilizzare CVCalChist per l'attività, quindi è possibile stabilire un po 'di soglia per determinare se la percentuale di pixel bianchi neri corrisponde a quella di un gradiente. Questo non risolverà l'attività ma ti aiuterà a ridurre la complessità.

Quindi, puoi erodere l'immagine per unire tutte le aree bianche. Dopo aver applicato la soglia, sarebbe possibile trovare componenti collegati (usando CVFindContours) che separeranno le immagini in zone nere o zone bianche. È quindi possibile rilevare gradienti trovando contemporaneamente aree 5x5 che contengono sia un pezzo di una zona bianca che una zona nera.

spero che sia d'aiuto.

Quello che stai descrivendo è Rilevamento dei bordi. Questo è esattamente come funziona il rivelatore a bordo astuccio. Cerca pixel scuri vicino a pixel leggeri e basato su una soglia in cui si passa (c'è anche il canny adattivo, che capisce la soglia per te) e li mette su tutto nero o tutto bianco (aka "segni" ).

Vedere qui:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top