【问题标题】:cimg display rendering blackcimg 显示呈现黑色
【发布时间】:2013-01-10 02:01:54
【问题描述】:

使用 CImg;我会保持这个快速而简单的。

CImg<float> i = *spectralImages->at(currentImage);
disp.display(i);
float* f = i.data();

尽管单步执行 *(f)、*(f+1)、*(f+2) 等正在检索正确的数字(255.0、245.0 等),但 disp 仍显示黑色图像

我整天都在处理这个问题。我缺少 CImg 的一个怪癖吗?

编辑: 将文件另存为 BMP 似乎可以得到正确的结果,所以只是绘制它的问题。

【问题讨论】:

    标签: c++ cimg


    【解决方案1】:

    如果您的 CImg 图像仅包含一个值或几个相等的值,则默认显示会将它们显示为黑色图像,因为标准化应用于显示的像素值。 由于 CImg 能够管理任何类型的图像(包括浮点值),它总是将 [0,255] 中的像素值归一化以进行显示(当然,它不会更改对象中的像素值,它只是在内部对它们进行归一化其显示)。 因此,如果您的图像具有单个像素值,则归一化将始终导致“0”,因此结果为黑色图像。

    这意味着您可能没有使用正确的像素标准化参数构造您的 CImgDisplay 显示(默认情况下,它是启用的)。 disp 应该这样构造:

    CImgDisplay disp(100,100,"my display",0);
    

    禁用像素值的默认标准化。

    【讨论】:

    • 啊,完美。这解释了一切。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多