2011-07-13 14 views
5

J'ai un fichier png de base avec deux couleurs, vert et magenta. Ce que je cherche à faire est de prendre tous les pixels magenta et les rendre transparents afin que je puisse fusionner l'image dans une autre image. Un exemple serait si j'ai un fichier image d'un caractère 2D sur un arrière-plan magenta. Je voudrais enlever tout le magenta en arrière-plan afin qu'il soit transparent. De là, je voudrais juste prendre l'image du personnage et l'ajouter comme une couche dans une autre image de sorte qu'il semble que le personnage a été placé dans un environnement.Rendre une couleur complètement transparente dans OpenCV

Merci d'avance.

Répondre

9

C'est le code que je voudrais utiliser,

Tout d'abord, chargez votre image:

IplImage *myImage; 
myImage = cvLoadImage("/path/of/your/image.jpg"); 

Ensuite, utilisez un masque comme celui-ci pour sélectionner la couleur, vous devez vous référer à la documentation. Dans la suite, je veux sélectionner un bleu (ne pas oublier que dans les images OpenCV sont au format BGR, donc 125,0,0 est un bleu (il correspond à la limite inférieure) et 255,127,127 est bleu avec une certaine tolérance et est la limite supérieure. je choisi borne inférieure et supérieure avec une tolérance de prendre tout le bleu de l'image, mais vous pouvez choisir ce que vous voulez ...

cvInRangeS(image, 
      cvScalar(125.0, 0.0, 0.0), 
      cvScalar(255.0, 127.0, 127.0), 
      mask 
      ); 

maintenant, nous avons sélectionné le masque, laissez de l'inverse (comme nous ne voulons pas garder le masque, mais retirons)

cvNot(mask, mask); 

puis copiez votre image avec le masque,

IplImage *myImageWithTransparency; //You may need to initialize it before 
cvCopy(myImage,myImageWithTransparency,mask); 

L'espoir pourrait aider,

S'il vous plaît se référer à la OpenCVDocumentation pour plus d'informations

Here it is

Julien,

+0

Merci pour l'aide :) – Seb

+0

Hey, il semble que je l'ai fait une erreur, ce n'est pas seulement cvCopy (myImage, myImageWithTransparency) mais cvCopy (myImage, myImageWithTransparency, masque) :). J'ai édité mon post, faites attention si vous l'utilisez ... – jmartel

Questions connexes