2011-07-13 37 views
5

Tengo un archivo png básico con dos colores, verde y magenta. Lo que quiero hacer es tomar todos los píxeles magenta y hacerlos transparentes para que pueda fusionar la imagen en otra imagen.Haciendo un color completamente transparente en OpenCV

Un ejemplo sería si tengo un archivo de imagen de un personaje 2D sobre un fondo magenta. Quitaría todo el magenta en el fondo para que sea transparente. A partir de ahí, tomaría la imagen del personaje y la agregaría como una capa en otra imagen para que parezca que el personaje se ha colocado en un entorno.

Gracias de antemano.

Respuesta

9

Ese es el código, lo usaría,

En primer lugar, cargar su imagen:

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

continuación, utilizar una máscara como esta para seleccionar el color, se debe hacer referencia a la documentación. A continuación, deseo seleccionar un azul (no olvide que en las imágenes OpenCV están en formato BGR, por lo tanto 125,0,0 es azul (corresponde al límite inferior) y 255,127,127 es azul con cierta tolerancia y es el límite superior. elegí inferior y superior con una tolerancia de tomar todo el azul de la imagen, pero puede seleccionar lo que quiera ...

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

Ahora hemos seleccionado la máscara, a dejar inversa que (ya que no queremos mantener la máscara, pero que la eliminemos)

cvNot(mask, mask); 

y luego copiar su imagen con la máscara,

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

espero que podría ayudar,

Consulte la OpenCVDocumentation para más información

Here it is

Julien,

+0

Gracias por la ayuda :) – Seb

+0

Hey, parece que lo hice un error, no es solo cvCopy (myImage, myImageWithTransparency) sino cvCopy (myImage, myImageWithTransparency, mask) :). Edité mi publicación, ten cuidado si la usas ... – jmartel

Cuestiones relacionadas