Python PIL/枕头图像输出比所需的RGB值更红
我一直在尝试将matplotlib的matshow函数等效为PIL图像。在这个过程中,我意识到通过应用颜色贴图生成的颜色总是比mathshow版本中的颜色稍微红一些 下面是我编写的用于测试和验证场景的快速测试代码: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
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,并找出可能存在的问题。