Comment faire pour convertir un 8-bit OpenCV IplImage* 32 bits IplImage*?

J'ai besoin de convertir un 8-bit IplImage en 32 bits IplImage. À l'aide de la documentation sur le web, j'ai essayé les choses suivantes:

//general code
img2 = cvCreateImage(cvSize(img->width, img->height), 32, 3);
int height    = img->height;
int width     = img->width;
int channels  = img->nChannels;
int step1     = img->widthStep;
int step2     = img2->widthStep;
int depth1    = img->depth;
int depth2    = img2->depth;
uchar *data1   = (uchar *)img->imageData;
uchar *data2   = (uchar *)img2->imageData;

for(h=0;h<height;h++) for(w=0;w<width;w++) for(c=0;c<channels;c++) {
   //attempt code...
}

//attempt one
//result: white image, two red spots which appear in the original image too.
//this is the closest result, what's going wrong?!
//see: http://files.dazjorz.com/cache/conversion.png
((float*)data2+h*step2+w*channels+c)[0] = data1[h*step1+w*channels+c];

//attempt two
//when I change float to unsigned long in both previous examples, I get a black screen.

//attempt three
//result: seemingly random data to the top of the screen.
data2[h*step2+w*channels*3+c] = data1[h*step1+w*channels+c];
data2[h*step2+w*channels*3+c+1] = 0x00;
data2[h*step2+w*channels*3+c+2] = 0x00;

//and then some other things. Nothing did what I wanted. I couldn't get an output
//image which looked the same as the input image.

Comme vous le voyez je ne sais pas vraiment ce que je fais. J'aimerais savoir, mais je l'aime plus si je pouvais le faire correctement.
Merci pour toute aide que je reçois!

OriginalL'auteur |