10

Ho un'immagine con un triangolo equilatero e un rettangolo:
equilateral triangle and a rectangle
E voglio rilevare 3 angolo solo il triangolo. Seguo lo OpenCV Harris corner detector tutorial Vedo che tutti i punti d'angolo del triangolo hanno la soglia = 80 (quando tutti i 4 punti d'angolo della soglia del rettangolo = 255). Ma non ho trovato il collegamento tra soglia e grado.Come rilevare angolo con specifico gradi angolo

Come posso trovare l'angolo compreso nell'intervallo [55,65], ad esempio?
Ecco l'output Mat http://pastebin.com/raw.php?i=qNidEAG0

P/s: Sono molto nuovo al CV, spero che tu possa dare qualche dettaglio in più!

risposta

9

Sembra che abbia trovato la soluzione possibile. L'ho implementato su Mathematica e in grado di spiegare i passaggi di base.

  1. Utilizzare l'operatore Trova angoli e prendere gli angoli più forti. Utilizzare l'operatore Harris. Corners
  2. Trova contorni (cv :: FindContours).

    Contours

  3. Per ogni angolo in ogni profilo disegnare un cerchio e trovare il punto di intersezione tra cerchio e il contorno. Non c'è una funzione pronta per questo in OpenCV e dovresti implementarlo tu stesso.

    Intersections

  4. Ora, per ogni angolo si hanno coordinate di tre punti d'angolo, e due punti sui lati di contorno. E 'sufficiente per valutare gli angoli utilizzando dot product:

    angle estimation

Risultato:

Corners found

+0

Per il primo passo, vuoi dire è trovare tutti i massimi locali del risultato formano il * cv :: cornerHarris *? – nvcnvn

+0

Sì, hai capito bene. – brotherofken

+0

Ottima soluzione! Penso che il modo più semplice per trovare punti di intersezioni nel punto 3 sia disegnare cerchi sull'immagine vuota (vuota) e l'uso e l'operatore su questa immagine e sull'immagine dei contorni. Il risultato dovrebbe essere tutti i punti di intersezione. – cyriel