imshow使用astype(float)后反转颜色

时间:2016-02-15 23:05:00

标签: matplotlib

我使用matplotlib imshow来显示来自cifar-10的数据。在阅读cifar10数据后,我发现使用imshow后,.astype(float)呈现的图像有所不同。

例如,

没有.astype(float)

enter image description here

这是我在.astype(float)

中看到的内容

enter image description here

为什么看起来图像渲染时颜色反转?

以下是我正在使用的代码:

dir = 'resources/datasets/cifar-10-batches-py'
import cPickle
fo = open(dir + '/data_batch_1', 'rb')
dict = cPickle.load(fo)
fo.close()
X=dict['data'].reshape((10000, 3, 32, 32)).transpose(0, 2, 3, 1).astype(float)
Y=dict['labels']
plt.imshow(X[2,])
plt.show()

1 个答案:

答案 0 :(得分:0)

有点晚,但寻求帮助并找到这篇文章的人:

这个post给出了matplotlib如何决定色彩映射的一个很好的解释。

我刚遇到同样的问题,并在这篇文章中找到了解决方案。似乎matplotlib假设类型为float的3d图像在[0,1]范围内,并使用1的模运算来钳制值,如2.7 - > 0.7。

试试这个:

X=dict['data'].reshape((10000, 3, 32, 32)).transpose(0, 2, 3,1)

X = X.astype(float) / 255    
plt.imshow(X[2,])

现在matplotlib应该直接使用提供的值,而不是使用内部模数魔法。