我使用matplotlib imshow
来显示来自cifar-10的数据。在阅读cifar10数据后,我发现使用imshow
后,.astype(float)
呈现的图像有所不同。
例如,
没有.astype(float)
这是我在.astype(float)
为什么看起来图像渲染时颜色反转?
以下是我正在使用的代码:
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()
答案 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应该直接使用提供的值,而不是使用内部模数魔法。