Python 在读取图像并在屏幕上再次显示时,格式会发生变化

Python 在读取图像并在屏幕上再次显示时,格式会发生变化,python,numpy,matplotlib,scipy,scikit-image,Python,Numpy,Matplotlib,Scipy,Scikit Image,我有一个tif图像,它的类型是float32,形状是(128*128)(灰度图像)。所有像素值的范围为[0.0,1.0] 当我使用skimage阅读它并使用matplotlib输出它时。输出图像看起来像RGB图像 但是,当我使用matplotlib读取图像时,output=plt.imread(os.path.join(image\u path,raw\u image\u name))。我发现像素值将变成255和0。输出图像将变为黑色,如第二幅图像所示。我不明白这是怎么回事?我猜在阅读过程中会

我有一个tif图像,它的类型是
float32
,形状是
(128*128)
(灰度图像)。所有像素值的范围为
[0.0,1.0]

当我使用
skimage
阅读它并使用
matplotlib
输出它时。输出图像看起来像RGB图像

但是,当我使用
matplotlib
读取图像时,
output=plt.imread(os.path.join(image\u path,raw\u image\u name))
。我发现像素值将变成255和0。输出图像将变为黑色,如第二幅图像所示。我不明白这是怎么回事?我猜在阅读过程中会发生一些数据类型的变化


当您使用
skipage
matplotlib
显示图像时,只需给它
cmap='gray'
如下所示:

plt.imshow(output,cmap='gray')
这将为您提供数据的灰度图像。也看看这个

当您使用Matplotlib读取tif图像时,它会尝试将图像转换为0…255的范围,因为它会返回到PIL来处理TIFF,而TIFF仅适用于uint8值,具体如下所示:

作为旁注,PIL可以使用的唯一数据类型是uint8。Matplotlib plotting可以处理float32和uint8,但除PNG以外的任何格式的图像读/写仅限于uint8数据


谢谢因此,如果将图像保存为tif或任何其他类型而不是unit8的文件,则使用matplotlib读取图像是不正确的。我的理解正确吗?我认为大多数tif图像将保存为uint8或类似格式,至少在显微镜成像数据方面,我不认为我都遇到过值介于0和1之间的tif文件。是的,如果您想读入不是uint8的数据,请不要使用matplotlib,我不确定它在uint16/uint32上如何执行。
plt.imshow(output,cmap='gray')