2010-02-16 5 views
2

Je cours le code simple ci-dessous et attend la profondeur de o pour devenir 32. Mais il reste toujours 8. Est-ce que je manque quelque chose ???cvConvertScale ne fonctionne pas comme prévu?

IplImage *o = cvCreateImage(cvSize(100,100), 8,1); 
    IplImage *n = cvCreateImage(cvSize(100,100), 32,1); 

    cvConvertScale(o,n,1.0,0.0); 

    printf("The depth of o is %d\n", o->depth); 
    printf("The depth of n is %d\n", n->depth); 

Répondre

1

ALright, le comportement correct. Le type de données dans l'image source n'est pas converti dans le type de données de la destination. Simplement que la source est multipliée avec la constante de mise à l'échelle et transtypée dans le type de la destination, et stocke le résultat dans la destination.

Il n'y a donc aucun changement dans les types de la source ou de la destination. seulement les données dans les changements de destination pour une mise à l'échelle constante autre que 1,0

1

Ce qui serait plus logique est la suivante:

 
    IplImage *in8u = cvLoadImage(filename, 1); // always uint8, and in this case 3 channel 
    IplImage *in32f = cvCreateImage(cvSize(100,100), IPL_DEPTH_32F ,3); // whatever you choose 

    cvConvertScale(in8u,in32f,1.0,0.0); 

    printf("The depth of in8u is %d\n", in8u->depth); 
    printf("The depth of in32f is %d\n", in32f->depth); 

Vous avez maintenant les données du fichier d'entrée 8 bits comme les données de 32 bits virgule flottante

Questions connexes