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
- 1. Rileva linee Opencv nell'oggetto
- 2. Linee diagonali parallele su sfondo
- 3. Come testare la prossimità delle linee (trasformazione Hough) in OpenCV
- 4. OpenCV rileva numeri
- 5. OpenCV rileva intersezione contorni
- 6. Rilevamento di linee e forme in OpenCV con Python
- 7. OpenCV Hough linee più forti
- 8. Rileva l'area di testo in un'immagine usando python e opencv
- 9. Rileva cerchi/ellissi sovrapposti/sovrapposti con OpenCV e Python
- 10. Rileva la forma a stella in opencv-python
- 11. Rileva il parcheggio con opencv
- 12. Detect "Kinks" in linee parallele in curve di Bezier
- 13. Android OpenCV - rileva le curve da Houghlines
- 14. Rileva linee del browser avvolte tramite javascript
- 15. Rileva una forma specifica utilizzando OpenCV
- 16. OpenCV C++ Disegna rettangolo basato su due linee
- 17. re.search Linee multiple Python
- 18. OpenCV 2.0 e Python
- 19. API OpenCV python: FlannBasedMatcher
- 20. OpenCV Python Linker Error
- 21. Python OpenCV Box2D
- 22. OpenCV HOGDescripter Python
- 23. opencv macport python binding
- 24. Python: Urllib2 e OpenCV
- 25. OpenCV Python calcOpticalFlowFarneback
- 26. Rilevamento di scanalature OpenCV
- 27. OpenCV Python: Draw minAreaRect (RotatedRect non implementato)
- 28. python - OpenCV mat :: convertTo in python
- 29. Python PEP8: convenzione linee vuote
- 30. Linee casuali Python da sottocartelle
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