2010-09-07 13 views
6

J'ai besoin de développer un logiciel qui sélectionne un visage d'une photo où l'arrière-plan est de couleur unie (vert, comme dans les films).Comment puis-je détecter l'arrière-plan d'une image par programmation?

Ensuite, nous voulons composer cette sélection avec une autre image d'arrière-plan, cette partie est facile avec de nombreuses bibliothèques. Mais je ne sais pas comment puis-je faire la sélection? Pouvez-vous donner des liens ou des bibliothèques à étudier? Je peux faire ce projet avec n'importe quelle langue de mon choix, donc des exemples ou des liens dans n'importe quelle langue sont les bienvenus.

+0

D'un point de vue conceptuel, ceci est en fait très simple - il suffit de convertir les pixels du fond vert en une valeur 0 alpha et de dessiner l'image sur l'image d'arrière-plan où vous voulez. En pratique, il peut être un peu délicat sur les bords de la frontière. Pouvez-vous décrire un peu plus la technologie que vous utilisez? c'est à dire, est-ce Windows, C++, etc – GrandmasterB

+0

GrandmasterB, merci pour votre réponse. Je peux utiliser n'importe quelle langue ou plateforme dans Windows, je pensais utiliser Java ou C#. Pouvez-vous partager un lien ou un exemple? Je veux faire des recherches mais je ne trouve pas trop d'informations sur google. – Castro

Répondre

2

Ok, ce que vous essayez de faire est appelé clé chroma. Comme vous le dites, il a beaucoup utilisé dans les films avec un écran bleu/vert. Sur les fenêtres c'est en fait assez facile à faire car il est intégré dans Windows dans le cadre de GDI + (ou sur C#, je pense que c'est juste appelé la classe Graphics).

Je n'ai pas de code exemple à portée de main, mais le processus est assez simple:

Avec GDI +, vous créez un objet bitmap de l'image de premier plan (l'un avec l'arrière-plan vert). Ensuite, créez un objet ImageAttributes. Utilisez la méthode SetColorKey() de l'objet ImageAttribute pour spécifier une couleur ou une gamme de couleurs à utiliser comme couleur d'arrière-plan. Enfin, dessinez cet objet bitmap sur le bitmap cible et GDI + le dessinera comme si la couleur d'arrière-plan était transparente.

Il n'y a pas que du code, mais conceptuellement c'est tout ce qu'il y a à faire.

1

Il s'agit probablement d'un domaine dans lequel il est plus facile de travailler dans un autre espace que RVB, tel que HSV.

Je voudrais également regarder la bibliothèque OpenCV.