OpenCV双垫显示为全白色

Jas*_*son 1 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";
Run Code Online (Sandbox Code Playgroud)

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

imshow(window_name, result);
waitKey();
Run Code Online (Sandbox Code Playgroud)

我刚得到一张白色的图像。只是白色像素。没有其他的。

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

使用Windows 7,OpenCV 233

Jac*_*cob 6

如果您使用imshow. 我敢打赌您的值超过 1.0,因此这些像素都设置为 255,为您提供白色图像。


Gau*_*Raj 6

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

  1. 如果图像是8位无符号的,则按原样显示。
  2. 如果图像是16位无符号或32位整数,则将像素除以256。即,值范围[0,255 * 256]映射到[0,255]。
  3. 如果图像是32位浮点,则将像素值乘以255。即,值范围[0,1]映射到[0,255]。

您的矩阵位于第三类,其中imshow期望值在0到1之间,因此将其乘以255。由于您的值已经在0到255之间,因此您会得到不想要的结果。因此,归一化0和1之间的像素将起作用。

  • 感谢所有的精度。到目前为止最好的答案! (2认同)