2 Stimmen

cvConvertScale funktioniert nicht wie erwartet?

Ich führe den folgenden einfachen Code aus und erwarte, dass die Tiefe von o 32 wird. Aber es bleibt bei 8. Übersehe ich etwas?

  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);

1voto

Geeta V Punkte 33

ALright, das Verhalten richtig. Der Datentyp im Quellbild wird nicht in den Datentyp des Ziels konvertiert.

Nur, dass die Quelle mit der Skalierungskonstante multipliziert und in den Typ des Ziels umgewandelt wird, und das Ergebnis im Ziel gespeichert wird.

Es gibt also keine Änderung in den Typen der Quelle oder des Ziels. Nur die Daten im Ziel ändern sich bei einer anderen Skalierungskonstante als 1,0

1voto

Enjo Punkte 11

Was mehr Sinn machen würde, wäre:

  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); 

Jetzt haben Sie die Daten der 8-Bit-Eingabedatei als 32-Bit-Float-Daten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X