Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PIL/枕头图像输出比所需的RGB值更红_Python_Matplotlib_Pillow - Fatal编程技术网

Python PIL/枕头图像输出比所需的RGB值更红

Python PIL/枕头图像输出比所需的RGB值更红,python,matplotlib,pillow,Python,Matplotlib,Pillow,我一直在尝试将matplotlib的matshow函数等效为PIL图像。在这个过程中,我意识到通过应用颜色贴图生成的颜色总是比mathshow版本中的颜色稍微红一些 下面是我编写的用于测试和验证场景的快速测试代码: import matplotlib import matplotlib.pyplot as plt import numpy as np from PIL import Image data = np.ones((5,5))*0.5 cmap = matplotlib.cm.jet

我一直在尝试将matplotlib的matshow函数等效为PIL图像。在这个过程中,我意识到通过应用颜色贴图生成的颜色总是比mathshow版本中的颜色稍微红一些

下面是我编写的用于测试和验证场景的快速测试代码:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

data = np.ones((5,5))*0.5
cmap = matplotlib.cm.jet

#generate PIL image
m = matplotlib.cm.ScalarMappable(norm=None, cmap=cmap)
colormapped = m.to_rgba(data)*255
print(colormapped)
outputImage = Image.fromarray(np.uint8(colormapped))
outputImage.show()
print(list(outputImage.getdata()))

#generate matplotlib figure
fig = plt.figure()
ax = fig.add_axes((0,0,1,1))
ax.set_axis_off()
ax.matshow(data, cmap=cmap)
plt.show()
根据jet colormap,数据为5x5矩阵,填充0.5,应生成纯蓝色的图像

当我打印出由to_rgba函数和Image.getdata函数生成的矩阵时,我得到了所需的值0,0127.5。然而,当我显示图像或将其保存为.png时,PIL版本比matshow版本更红-根据MS Paint和Photoshop验证,matshow版本的期望值为0,0127,而PIL版本的值为31,0111

我认为这与PIL/pillow渲染图像的方式有关。但是,我如何解决这个问题?我需要蓝色来保持蓝色!绿色通道也会受到影响,但远没有那么大——例如,136、136、136变为145、134、116

我在Win8 x64上的Anaconda 2.0.1下的Python 3.4.1上执行此操作。以下是我正在使用的软件包版本: numpy:1.9.1 枕头:2.5.1
matplotlib:1.4.2

如果没有PIL的outputImage.show,则图像在保存为PNG时似乎可以正确渲染。视觉输出不正确,显示视觉输出后保存时,保存的图像会反映原始输出渲染的内容


此外,我只能在我的Win8机器上用PIL2.5.1在Python3.4.1下重现这个问题。在带有PIL 1.1.7的Win8中的Python 2.7.9上,当使用show命令时,显示的图像无法渲染,该命令一直说文件丢失,并且保存的图像颜色正确。

我无法使用Python 2.7.9、numpy 1.9.1、,Mac OS X上的matplotlib 1.4.2和Pizzle 2.5.3。matshow和outputImage.show显示的颜色看起来相同,使用outputImage.save'filename.PNG'创建的PNG文件中的像素值都是0、0、127、255。是的,我也应该在另一台机器上测试一下。在我的Ubuntu 13.10安装程序中,在Python2和Python3上,颜色都是正确的。所以我猜这取决于平台*编辑-我将尝试在我的Win8机器上安装Python2,并找出可能存在的问题。