【问题标题】:Problem displaying an array of floats with OpenCV使用 OpenCV 显示浮点数组时出现问题
【发布时间】:2011-07-04 10:28:52
【问题描述】:

我只想在窗口中显示一个浮点数组,我使用的代码是:

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

弹出的图像全是白色的。我做错了什么?

谢谢

编辑:

感谢 Martin Beckett 这么快的回答。我对 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();

【问题讨论】:

  • AFAIK 你不能显示 16bit 数据 - 你需要先转换成 8bit 看 cvtColor()

标签: image opencv floating-point


【解决方案1】:

如果值在 0-1 之间,OpenCV 只能显示浮点图像

你的浮点数据的范围是多少?

【讨论】:

    【解决方案2】:

    假设您的字符尚未格式化为浮点数是否安全?

    浮点颜色从 0.0 变为 1.0,uchars 从 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;
    

    这也可能有帮助:How to convert an 8-bit OpenCV IplImage* to a 32-bit IplImage*?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多