2010-09-07 5 views
6

Ho bisogno di sviluppare un software che seleziona una faccia da una foto in cui lo sfondo è di un colore semplice (verde, come nei film).Come posso rilevare lo sfondo di un'immagine a livello di codice?

Quindi vogliamo comporre quella selezione con un'altra immagine di sfondo, questa parte è facile con molte librerie. Ma non so come posso fare la selezione? Puoi dare alcuni link o librerie per indagare? Posso fare questo progetto con qualsiasi lingua della mia scelta, quindi sono benvenuti esempi o collegamenti in qualsiasi lingua.

+0

Concettualmente questo è in realtà molto semplice: basta convertire i pixel di sfondo verde in un valore di 0 alfa e disegnare l'immagine sull'immagine di sfondo dove si desidera. In pratica può essere un po 'complicato intorno ai bordi del confine. Puoi descrivere un po 'di più sulla tecnologia che stai utilizzando? cioè, questo è Windows, C++, ecc. – GrandmasterB

+0

GrandmasterB, grazie per la tua risposta. Posso usare qualsiasi lingua o piattaforma in Windows, stavo pensando di usare Java o C#. Puoi condividere un link o un esempio? Voglio fare qualche ricerca ma non riesco a trovare troppe informazioni su google. – Castro

risposta

2

Ok, quello che stai cercando di fare è chiamato chroma key. Come dici tu, ha usato molto nei film con uno schermo blu/verde. Su Windows è in realtà piuttosto facile da fare perché è incorporato in Windows come parte di GDI + (o su C#, penso che sia appena chiamato la classe Graphics).

Non ho alcun codice di esempio a portata di mano, ma il processo è piuttosto semplice:

con GDI +, si crea un oggetto bitmap della tua immagine in primo piano (quello con lo sfondo verde). Quindi creare un oggetto ImageAttributes. Utilizzare il metodo SetColorKey() dell'oggetto ImageAttribute per specificare un colore o un intervallo di colori da utilizzare come colore di sfondo. Infine, disegna l'oggetto bitmap sulla bitmap di destinazione e GDI + lo disegna come se il colore di sfondo fosse trasparente.

C'è di più in questo nel codice, ma per quanto riguarda l'aspetto concettuale è tutto quello che c'è da fare.

1

Questa è probabilmente un'area in cui è più semplice lavorare in un altro spazio rispetto a RGB, ad esempio HSV.

Vorrei anche dare un'occhiata alla libreria OpenCV.

Problemi correlati