Проблема с отображением массива с плавающей точкой в ​​OpenCV - PullRequest
1 голос
/ 25 февраля 2011

Я просто хочу отобразить массив чисел с плавающей точкой в ​​окне, код, который я использую:

CvSize size;
size.height = HEIGHT ; //(640)
size.width = WIDTH; //(1680)
IplImage* ipl_image_p = cvCreateImageHeader(size, IPL_DEPTH_32F, 1);
ipl_image_p->imageData = (char*)my_float_image_data; //imageData only accepts char*
ipl_image_p->imageDataOrigin = ipl_image_p->imageData;


cvNamedWindow("Image", 1);
cvShowImage("Image", ipl_image_p);
cvWaitKey(0);
cvDestroyAllWindows();

Изображение, которое появляется, полностью белое. Что я делаю не так?

Спасибо

EDIT:

Спасибо Мартину Беккету за быстрый ответ. У меня тоже такая же проблема с 16-битными изображениями, это связано? (мое изображение варьируется от 0 до 1000)

unsigned short* temp = new unsigned short[HEIGHT*WIDTH];
for(int i = 0 ; i < HEIGHT*WIDTH; i++){
    temp[i] = (unsigned short)my_float_image_data[i];
}

CvSize size;
size.height = HEIGHT ;
size.width = DISPLAY_DATA_WIDTH;
IplImage* ipl_image_p = cvCreateImageHeader(size, IPL_DEPTH_16U, 1);
ipl_image_p->imageData = (char*)temp;
ipl_image_p->imageDataOrigin = ipl_image_p->imageData;

cvNamedWindow("Image", 1);
cvShowImage("Image", ipl_image_p);
cvWaitKey(0);
cvDestroyAllWindows();

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

OpenCV может отображать изображения с плавающей запятой, только если значения находятся в диапазоне 0-1

Каков диапазон ваших данных с плавающей запятой?

1 голос
/ 25 февраля 2011

Можно ли предположить, что ваши символы уже не отформатированы как числа с плавающей запятой?

Цвета с плавающей запятой изменяются от 0,0 до 1,0, а учары - от 0 до 255. Следующий код исправляет это:

// h is height, w is width, c is current channel (0 to 2)
int b = ((uchar *)(img->imageData + h*img->widthStep))[w*img->nChannels + c];
((float *)(img2->imageData + h*img2->widthStep))[w*img2->nChannels + c] = ((float)b) / 255.0;

это тоже может помочь: Как преобразовать 8-битный OpenCV IplImage * в 32-битный IplImage *?

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