[EDITED] Ecco come è fatto.
Passaggi: 1. Isolare la parte del divisore stradale.
Quindi, utilizzando Houghline, scopri le linee più lunghe in Immagine. Scopri i punti extrema che attraversano il confine dell'immagine. Hai ottenuto i punti Quadilaterali. Ho saltato questa parte scegliendo manualmente. Nel mio caso, la larghezza della strada nella parte superiore dell'immagine è 10 e nella parte inferiore è 60.
Ora, per la destinazione, dobbiamo creare un'immagine in modo che il divisore quadrilatero abbia una larghezza uniforme di 60, quindi salviamo in un altro array nuovi punti, che hanno gli stessi punti in basso, ma i punti in alto vengono modificati in quanto formano un rettangolo con altezza uguale all'immagine (o più grande, puoi regolarlo come preferisci dopo averlo eseguito una volta e aver visto i risultati), ma larghezza 60. Ricorda, stiamo trasformando la nostra immagine in modo tale che il divisore si adatti a quest'area rettangolare. L'immagine cambierà automaticamente.
Ora, usando
Mat TransformMat = getPerspectiveTransform(ipPts, opPts);
di opencv su punti quadilaterali iniziali e di destinazione, otteniamo una matrice di trasformazione, che applichiamo alla nostra immagine di prova.
warpPerspective(ipImg, opImg, TransformMat, ipImg.size());
Vedrai che molte aree vengono ritagliate per adattarsi all'output in Dimensione input-immagine. Tuttavia noterai che l'immagine è stata trasformata per ottenere un divisore parallelo, come ci aspettavamo. Eseguendo un po 'di traduzione e roba, e ottenendo un'immagine di output di dimensioni maggiori, otterrai questo. Non possiamo mai ottenere un'immagine di output perfettamente avvolta, poiché le sue dimensioni possono essere molto grandi. Ma raggiungeremo alcuni limiti che adempiranno al nostro compito. Ecco l'ultima immagine: