2011-11-08 14 views
5

Sto appena iniziando a imparare la programmazione OpenCV. Posso chiederti come posso identificare linee e curve in OpenCV? Il mio problema è che devo identificare se l'immagine contiene una curva convessa (curva orizzontale o verticale), una verticale, una diagonale o una linea orizzontale.OpenCV Identifying Lines and Curves

Nel mio codice, ho usato CvSetImageROI per prendere una particolare parte di un'immagine, e quindi sto cercando di identificarli in base a dette linee/curve.

Sono disponibili funzioni in OpenCV? Grazie mille per l'aiuto. A proposito, sto usando Linux e C++.

+0

Trova un metodo per identificare le curve nell'immagine. –

risposta

5

trasformare Hough http://en.wikipedia.org/wiki/Hough_transform, http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm è il modo standard per farlo. Nella sua forma semplice (implementata in OpenCV) è in grado di rilevare linee di posizione arbitray e segmenti di angolo e linea.

Guardate qui per un esempio http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=hough#houghlinesp

Per le curve, il processo di rilevamento è un po 'più complicato, ed è necessario il Hough generale trasformarlo non è ancora disponibile in OCV, ma è possibile scrivere come esercizio o cercare una buona implementazione. http://en.wikipedia.org/wiki/Generalised_Hough_transform lo descrive (in breve)

+3

Si potrebbe anche cercare in Canny() e FindContours() – Adrian

+0

Come posso controllare gli angoli? Posso ottenerlo dai parametri? Grazie mille! – cmsl

+0

La trasformazione di Hough restituisce gli angoli e intercetta (se si utilizza quello classico) e gli endpoint di segmento (per quello probabilistico). È possibile estrarre gli angoli con semplici calcoli geometrici dagli endpoint o utilizzare la classica trasformazione. Controlla la documentazione di OpenCV e l'esempio nel link sopra – Sam