Wie konvertiert einen 8-bit-OpenCV IplImage* auf einer 32-bit-IplImage*?

Brauche ich zum konvertieren eines 8-bit-IplImage zu einem 32-bit IplImage. Mit Dokumentation, die von allen über die Website, die ich habe versucht, die folgenden Dinge:

//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.

Als Sie sehen, dass ich nicht wirklich weiß, was ich Tue. Ich würde gerne herausfinden, aber ich würde es lieben, mehr könnte ich dies richtig gemacht.
Vielen Dank für jede Hilfe, die ich bekomme!!!

Schreibe einen Kommentar