Ho la situazione che ho una piccola immagine binaria che ha un forma, attorno al quale voglio trovare il miglior rettangolo ruotato raccordo (non rettangolo di delimitazione). So che c'è cv :: minAreaRect() che si applica sul risultato trovato da cv :: findContours(), ma questo ha prodotto risultati scarsi nel mio caso, perché i dati sono rumorosi (provenienti da MS Kinect , vedere l'esempio immagine dove la rotazione cambia a causa dei dati di ingresso (profilo) leggermente diversi). Quello che ho fatto invece è stato calcolare l'asse principale usando PCA sulla mia immagine binaria (che è meno sensibile al rumore), che produce l'angolo "a", e ora voglio creare un
RotatedRect
attorno alla mia forma, dato l'angolo del principale asse, a).OpenCV RotatedRect con angolo specificato
Ho un'illustrazione, realizzata con le mie superbe abilità Paint!
Quindi la mia domanda è: ragazzi avete frammenti di codice o suggerimenti concreti per risolvere questo? Temo di dover fare molte varianti di Bresenham, sperando che ci sia un approccio intelligente.
Btw, per coloro che non hanno familiarità con la struttura dati RotatedRect di openCV: è definita da altezza, larghezza, angolo e punto centrale, assumendo che il punto centrale sia effettivamente, beh, al centro del rettangolo .
Cheers!
Non si ruota la forma di a, quindi si adatta il rettangolo? –
La rotazione non è un'opzione. Non si può presumere che la forma sia effettivamente al centro dell'immagine. Potrebbe anche essere nell'angolo in basso a sinistra. La mia attuale idea di risolvere questo problema è quella di fare il traversali di Bresenham, forse abbastanza intelligente da non scansionare quelle aree che già conosco sono state scansionate, cercando di massimizzare la larghezza e l'altezza del rettangolo ruotato. –
NameZero912
Cosa intendi con "questo ha prodotto risultati mediocri"? Puoi condividere un'immagine campione con cui stai lavorando? – fireant