I rilevamenti di linea portano spesso all'utilizzo della trasformazione di Hough, il rilevatore di bordi Canny e il rilevamento dei contorni fungono solo da pre-processori convenienti se necessario.
Se hai linee parallele, utilizzare
void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0)
per linee di rivelazione in cui il secondo parametro conterrà il rilevamento:
linee - Uscita vettore di linee. Ogni linea è rappresentata da un vettore a due elementi (ρ, θ). ρ è la distanza dall'origine della coordinata (0, 0) (angolo superiore sinistro dell'immagine). θ è la rotazione della linea angolo in radianti (0 ~ linea verticale, π/2 ~ linea orizzontale).
[opencv2refman.pdf]
Ciò significa, che la distanza tra due linee dovrebbe essere abs(rho1-rho2)
, che le distanze sono differenze assolute tra valori dei pixel nella prima colonna di lines
. (Nota: metodo dovrebbe essere CV_HOUGH_STANDARD
qui!)
Per linee non parallele si devono definire cosa pensi di come distanza, ma poi OpenCV può ancora fornire le coordinate di punti finali di ogni linea rilevata.
Devi solo usare method = CV_HOUGH_PROBABILISTIC
.
CV_HOUGH_PROBABILISTIC probabilistico trasformata di Hough (più efficiente nel caso in cui se l'immagine contiene alcuni segmenti lineari lunghi). Lo restituisce segmenti di linea anziché l'intera riga. Ogni segmento è rappresentato dai punti iniziale e finale e la matrice deve essere (la sequenza creata sarà) del tipo CV_32SC4.
[opencv2refman.pdf]
si possono anche trovare un tutorial in opencv_tutorials.pdf
all'interno della documentazione del OpenCV installato.
fonte
2012-11-22 16:43:14
Non è necessario aggiungere la firma al post - la scheda utente viene aggiunta automaticamente. – Artemix