2015-06-22 7 views
7

Panoramica:Come posso sostituire il rettangolo bianco all'interno di un'immagine usando ImageMagick?

La prima immagine è la mia immagine originale. Qui voglio sostituire il rettangolo bianco mostrato con un'altra immagine.

enter image description here

Il mio approccio:

Ho creato un'immagine maschera utilizzando floodfill e sembra come:

enter image description here

Problema:

Ora mi piacerebbe ottenere la distanza o le coordinate del rettangolo nella seconda immagine in modo da poter usare quelle coordinate per sovrapporre una nuova immagine sopra alla prima (immagine originale) qui.

Ho una piccola idea di usare l'operatore di morfologia di ImageMagick chebyshev, ma non so come posso farlo.

+0

Prova 'convertire image.jpg -threshold 90% result.jpg' –

+0

O forse' convertire image.jpg -threshold 90% -canny 0x1 + 10% + 30% result.jpg' –

+0

Ciao Marco. ..Grazie per la risposta. ma quello che voglio qui è ottenere le coordinate, l'angolo di rotazione, la larghezza e l'altezza del rettangolo per sovrapporre un'altra immagine. Si prega di vedere la mia altra domanda qui in modo da avere un'idea di ciò che sto cercando di ottenere. http://stackoverflow.com/questions/30971894/replacing-detected-object-in-a-frame-with-an-image-imageprocessing Spero di andare nel modo giusto. Se no, per favore guidami. Attualmente sto seguendo questo modo: http://www.imagemagick.org/discourse-server/viewtopic.php?t=20269 –

risposta

6

penso che è possibile individuare la forma abbastanza preciso con una semplice soglia, in questo modo:

convert image.jpg -threshold 90% result.jpg 

enter image description here

e si può poi fare un rilevamento dei bordi Canny in questo modo:

convert image.jpg -threshold 90% -canny 0x1+10%+30% result.jpg 

enter image description here

Il prossimo cose che sarebbe guardando sono, utilizzando la funzione -trim per trovare le coordinate riquadro di rifilo, in questo modo:

convert result.jpg -format "%@" info: 
320x248+152+40 

ho segnato che in data in rosso sotto.

enter image description here

Se si vuole realmente fare il trim, utilizzare questo:

convert result.jpg -trim result.jpg 

enter image description here

E inoltre, l'angolo di raddrizzamento

rilevamento linea
convert result.jpg -deskew 40 -format "%[deskew:angle]" info: 
-0.111906 

A Hough potrebbe anche essere efficace per te in questo modo:

convert image.jpg -threshold 90% -canny 0x1+10%+30%  \ 
    \(+clone -background none       \ 
       -fill red -stroke red -strokewidth 2  \ 
       -hough-lines 5x5+80 -write lines.mvg  \ 
    \) -composite hough.png 

enter image description here

e il file lines.mvg contiene le 4 linee siete alla ricerca di

# Hough line transform: 5x5+80 
viewbox 0 0 640 360 
line 449.259,0 474.432,360 # 90 
line 0,72.5604 640,27.8072 # 143 
line 0,293.098 640,248.344 # 187 
line 153.538,0 178.712,360 # 153 

Essere un po 'pigro, non mi sono sentito come risolvere per le intersezioni di queste linee, così ho pensato di lasciare che anche ImageMagick lo facesse, usando Morphology per cercare Line Junctions in questo modo:

convert image.jpg -threshold 90% -canny 0x1+10%+30%      \ 
    \(+clone -background none -fill red -stroke red -hough-lines 5x5+80 \) \ 
    -composite -fuzz 50% -fill black -opaque white      \ 
    -morphology HMT LineJunctions hough.png 

enter image description here

+0

grazie per lo sforzo. Farò una prova non appena aggiornerò il mio imagemagick a 6.9. Ho 6,7 e quindi non è stato in grado di utilizzare -canny che supporta in 6.8 in poi credo –

+0

Risposta eccellente, Mark! :-) –

+0

Ottimo lavoro ... grazie mille Marco –

Problemi correlati