J'ai besoin de convertir un IplImage de 8 bits en un IplImage de 32 bits. En utilisant la documentation de partout dans le web que j'ai essayé les choses suivantes:Comment convertir un IplImage * OpenCV 8 bits en un IplImage * 32 bits?
// 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'adorerais le savoir, mais je l'aimerais plus si je pouvais le faire correctement. Merci pour toute aide que je reçois!
Il y a quelques informations intéressantes sur cette page, des morceaux de code qui expliquent ce que j'ai Les résultats sont les mêmes, cependant, s'il vous plaît voir le lien suivant pour un exemple de ce qui ne va pas tout le temps: http://files.dazjorz.com/cache/conversion.png – sgielen
whoa, ouais, c'est un Donc, cela donne l'indice suivant: pour les points rouges, R est 1.0 et GB sont 0.0, et pour le blanc, tous les trois sont 1.0. Donc, tout en convertissant, les valeurs RVB devraient d être converti de 0 à 255 à 0,0 à 1,0. La modification de la valeur b/255 rend l'image noire + rouge. – sgielen
J'ai compris! int b = ((uchar *) (img-> imageData + h * img-> widthStep)) [w * img-> nChannels + 0]; // B ((float *) (img2-> imageData + h * img2-> widthStep)) [w * img2-> nChannels + 0] = ((float) b)/255.0; – sgielen