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; x
ptr_src = (uchar*)(image->imageData + x * originalImg->widthStep);
ptr_des = (uchar*)(roja->imageData + x * roja->widthStep);
for (y=0; 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;
}
