Monday, September 20, 2010

Efecto para ser invisible, para variar en OpenCV

El efecto mostrado en el post anterior es muy fácil de programar:
1.- Sacar una foto al fondo
2.- Reemplazar todos los pixeles color piel por su pixel correspondiente en la imagen tomada en 1.
Para detectar la piel humana en el espacio de colores RGB:

char isSkinPixel(IplImage *img, int x, int y) {
unsigned char R,G,B;
B = img->imageData[y*img->widthStep+x*img->nChannels];
G = img->imageData[y*img->widthStep+x*img->nChannels+1];
R = img->imageData[y*img->widthStep+x*img->nChannels+2];
if( R > 95 && G > 40 && B > 20 && ( max(R,G,B) - min(R,G,B) ) > 15 && abs( (int)(R-G) ) > 15 && R>G && R>B ) {
return 1;
}
return 0; 
}

La condición que se usa para detectar el color piel la ví en un paper, pero no lo pude encontrar para dejarlo aquí.

La detección de piel humana funciona bien sólo si estamos capturando imágenes en un lugar con la luminosidad adecuada, pues si esta muy oscuro o muy iluminado el color de la piel se pierde. Además hay falsos positivos si el fondo no es el adecuado.

Código fuente del programa : invisible (necesita la biblioteca OpenCV)

2 comments:

Anonymous said...

Buen dia estaba tratando de descargarme el codigo pero no me lo permite crees que puedas enviarme el codigo a mi correo robertostevenb@gmail.com muchas gracias

Juan Reyes said...

Hola, acabo de reparar el link, ahora puedes bajarlo. Saludos!

Post a Comment