Ho un'immagine e contiene delle forme. Ho rilevato linee con l'uso di linee di groviglio. Come posso rilevare quali linee sono parallele?Python openCV rileva linee parallele
risposta
equazione di una retta in coordinate cartesiane:
y = k * x + b
Due linee y = k1 * x + b1, y = k2 * x + b2 sono parallele, se k1 = k2.
Quindi è necessario calcolare il coefficiente k per ciascuna linea rilevata.
Per univocamente identificare l'equazione di una retta è necessario conoscere le coordinate di due punti che appartengono alla linea.
Dopo aver linee trovata con HoughLines (con il ++):
vector<Vec2f> lines;
HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0);
si hanno le linee vettoriali, che memorizza i parametri (r, theta) delle linee rilevate in coordinate polari. È necessario trasferirli in coordinate cartesiane:
Qui esempio in C++:
for(size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b)); //the first point
pt1.y = cvRound(y0 + 1000*(a)); //the first point
pt2.x = cvRound(x0 - 1000*(-b)); //the second point
pt2.y = cvRound(y0 - 1000*(a)); //the second point
}
Dopo aver ottenuto questi due punti di una linea si può calcolare la sua equazione.
grazie mille per la tua soluzione. – vtokmak
È sufficiente verificare che i valori theta per le linee di rilevamento siano paralleli o no? Possiamo dire che i valori di theta sono uguali a quelli di linee parallele? – vtokmak
Penso che controllare i valori di theta dovrebbe essere un controllo sufficiente. –
HoughLines restituisce i risultati in coordinate polari. Quindi basta controllare il 2 ° valore per l'angolo. Non c'è bisogno di convertire in x, y
def findparallel(lines):
lines1 = []
for i in range(len(lines)):
for j in range(len(lines)):
if (i == j):continue
if (abs(lines[i][1] - lines[j][1]) == 0):
#You've found a parallel line!
lines1.append((i,j))
return lines1
Se questo è fatto in Python, come dichiarato nei tag, è possibile utilizzare la versione SciPy di houghlines, che fornisce l'immagine di uscita houghspace: Vedi qui] (http://scikit-image.org/docs/dev/auto_examples/plot_line_hough_transform.html). È quindi possibile capovolgere l'asse indipendente (theta o 'X') e l'asse dipendente (rho o 'Y') in modo tale che theta sia ora l'asse dipendente. Dopo aver messo a segno questa immagine spaziale Hough (per ottenere i punti più intensi di (rho, theta) che corrispondono alle linee più probabili), puoi adattare una linea orizzontale ai dati: theta = costante (y = mx + b senza pendenza). – chase