0

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

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

disp 显示黑色图像,尽管通过 *(f)、*(f+1)、*(f+2) 等正在检索正确的数字(255.0、245.0 等)

我整天都在做这件事。我错过了 CImg 的怪癖吗?

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

4

1 回答 1

0

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

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

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

禁用像素值的默认归一化。

于 2013-01-10T08:23:24.163 回答