2014-06-12 21 views
7

Sto provando a rilevare i rettangoli usando OpenCV. Tuttavia, a volte questo diventa piuttosto difficile dopo l'esecuzione del metodo Canny, perché due dei bordi vengono di solito cancellati. Ho provato molti diversi set di soglie e l'ho offuscato prima di applicare Canny, ma non ho ancora ottenuto risultati molto positivi. Al momento, non sto sfocando l'immagine, quindi questo è più o meno quello che sto facendo:Rilevamento dei bordi con OpenCV (Canny)

Mat imgSource = Highgui.imread(filepath); 
Imgproc.Canny(imgSource, imgSource, 300, 600, 5, true); 

Esempio:

original http://imagizer.imageshack.us/a/img822/8776/27i9j.jpg Canny http://imagizer.imageshack.us/a/img841/9868/wkc95.jpg

Poi, sto cercando il metodo findContours di OpenCV per rilevare il rettangolo, funziona l'80% delle volte, come posso migliorarlo?

+0

come punto di partenza, prova a fare cvtColor (imgSource, imgSource, CV_BGR2GRAY); soglia (ImgSource, ImgSource, 25.255, THRESH_BINARY); e poi trovaContour –

risposta

7

Provare con un valore di soglia diverso, in questo caso si otterrà un risultato migliore quando si utilizzano valori di soglia inferiori, come 10.100.

blur(src,src,Size(3,3)); 
cvtColor(src,tmp,CV_BGR2GRAY); 
Canny(src, thr, 10, 100, 3); 

o in altro modo si otterrà le immagini di contorno applicando threshold come,

threshold(tmp,thr,50,255,THRESH_BINARY_INV); 
2

Il problema qui è il tipo di file JPEG di compressione delle immagini, probabilmente.
provare immagine si stampa in monocromatico dal momento che hai solo Immagine in bianco/nero e modificare il valore di soglia.
questo dovrebbe eliminare il rumore attorno ai bordi delle linee. quindi canny può essere applicato con qualsiasi valore.

Problemi correlati