Friday, June 19, 2009

Fonction pour convertir IplImage en grayscale sans passer par cvCvtColor

Un petit article sur OpenCV.
Apres avoir rechercher comment convertir une IPLImage en grayscale et si possible sans passer par cvCvtColor, j'ai reussi à le faire et je le partage avec vous.

Fonction pour convertir IplImage en grayscale sans passer par cvCvtColor/
Dans cette fonction, il y a aussi comment accéder au pixel d'une IplImage.


IplImage *GrayscaleConvert(IplImage* cimg)
{
int x,y;
int nbChannel = cimg->nChannels;
int iwd =cimg->widthStep;
IplImage* result=cvCloneImage(cimg);
char *idtS =cimg->imageData;
char *idtD =result->imageData;
uchar* pixelS_ptr;
uchar* pixelD_ptr;


for(x=0;xwidth;x++)
{
for(y=0;yheight;y++)
{
pixelD_ptr = &((uchar*)(idtD + iwd*y))[x*nbChannel];
pixelS_ptr = &((uchar*)(idtS + iwd*y))[x*nbChannel];

uchar grey = ((float)pixelS_ptr[0])*0.114 + ((float)pixelS_ptr[1])*0.587 +((float)pixelS_ptr[2])*0.299;

pixelD_ptr[0] = grey;
pixelD_ptr[1] = grey;
pixelD_ptr[2] = grey;
}
}
return result;
}

No comments: