cvConvertScale не работает, как ожидалось? - PullRequest
2 голосов
/ 16 февраля 2010

Я запускаю простой код ниже и ожидаю, что глубина o станет 32. Но это все еще остается 8. Я что-то упустил ???

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

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Что бы иметь больше смысла:

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

Теперь у вас есть данные 8-битного входного файла в качестве 32-битных данных с плавающей запятой

1 голос
/ 16 февраля 2010

Хорошо, поведение правильное. Тип данных в исходном изображении не преобразуется в тип данных пункта назначения.

Просто умножение источника на константу масштабирования, приведение к типу получателя и сохранение результата в получателе.

Таким образом, нет изменений в типах источника или назначения. Только данные в месте назначения изменяются на постоянную масштабирования, отличную от 1,0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...