OpenCV双层垫子显示为全白色

OpenCV double mat shows up as all white

本文关键字:白色 显示 OpenCV      更新时间:2023-10-16

我有一个类型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

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

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

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

如果使用imshow,则需要规范化浮点图像,使其值介于0.0到1.0之间。我敢打赌,你的值超过了1.0,因此这些像素都设置为255,这就是白色图像。