OpenCV双层垫子显示为全白色

时间:2012-03-06 17:23:32

标签: c++ opencv

我有一个类型6(双值,单通道)垫,数据范围从0到255.我可以使用以下代码打印出数据:

    double* data  =  result.ptr<double>();

    for(int i = 0; i < rows; i++)
        for(int j = 0; j < cols; j++)
    std::cout<<data[i*step+j]<<"\t";

这似乎完全正常 - 在0到255的范围内,以及我期望的大小。但是,当我尝试显示图像时:

imshow(window_name, result);
waitKey();

我只是得到一张白色图片。只是白色像素。没别了。

从文件中加载其他图像并在窗口中显示正常。

使用Windows 7,OpenCV 233

2 个答案:

答案 0 :(得分:5)

cv::imshow以下列方式运作 -

  1. 如果图像是8位无符号,则按原样显示。
  2. 如果图像是16位无符号或32位整数,则像素除以256.即,值范围[0,255 * 256]映射到[0,255]。
  3. 如果图像是32位浮点,则像素值乘以255.即,值范围[0,1]映射到[0,255]。
  4. 你的矩阵位于第3类,其中imshow期望值在0和1之间,因此它将它乘以255.由于你的值已经在0到255之间,你得到了不想要的结果。因此,将0和1之间的像素标准化将起作用。

答案 1 :(得分:3)

如果您使用的是imshow,则需要对浮点图像进行标准化,以使值介于0.0 - 1.0之间。我敢打赌你的值超过1.0,因此这些像素都设置为255,为你提供白色图像。