viernes, 7 de mayo de 2010

Separacion de Color Usando Opencv



En este codigo presentamos una imagen ya cargada y la distorcionamos un poco con el cvErode y luego con la funcion definida mas abajo separamos el color rojo y es el unico que presentamos y guardamos como otra imagen. Tambien podemos hacer lo mismo con los otros dos colores(Azul, Verde)

#include
#include
IplImage *originalImg; // Variable donde se almazenara el frame sacado de la webcam.
IplImage *red;
int c;
CvFont font;

IplImage* change_red( IplImage* image );
void main(){

while(1)
{
originalImg=cvLoadImage("talleres2.jpg",1);

cvNamedWindow("Original Image", 1);
cvShowImage("Original Image", originalImg);

//cvErode(originalImg,originalImg,0,1);
//cvNamedWindow("Dilate", 1);
//cvShowImage("Dilate", originalImg);


red=change_red(originalImg);

cvInitFont(&font,CV_FONT_ITALIC,1.0,1.0,0.0,1,8);
cvPutText(red,"Talleres",cvPoint((red->width)/3,(red->height)-100),&font,cvScalar(255,255,255,0));

cvNamedWindow("Roja", 1);
cvShowImage("Roja", red);
cvSaveImage("taller.jpg",red);

// Espero a que me pulsen el ESC para salir del bucle infinito.
c=cvWaitKey(0);
if( c == 27 ) break;
}

cvDestroyWindow("Original Image");
}

IplImage* change_red( IplImage* image )
{
CvSize size; //
int depth; //
int channels;
IplImage *roja;
int x,y;
uchar* ptr_src;
uchar* ptr_des;

size=cvGetSize(image); //
depth=image->depth; //
channels=image->nChannels; //
roja=cvCreateImage(size,depth,channels); //
cvSetZero(roja); //

for(x=0; xheight; x++) {
ptr_src = (uchar*)(image->imageData + x * originalImg->widthStep);
ptr_des = (uchar*)(roja->imageData + x * roja->widthStep);
for (y=0; ywidth; y++) {
ptr_des[3*y + 2] = ptr_src[3*y + 2]; // copia canal rojo (se asume que es el primero, en orden invertido)
}
}

return roja;
}

No hay comentarios:

Publicar un comentario