Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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 显示不同结果的Pyplot彩色地图_Python_Matplotlib_Scikit Image - Fatal编程技术网

Python 显示不同结果的Pyplot彩色地图

Python 显示不同结果的Pyplot彩色地图,python,matplotlib,scikit-image,Python,Matplotlib,Scikit Image,通过使用一些scikit图像代码示例和pyplot,我发现图像上的结果不同,这取决于我应用颜色贴图的方式,我不知道为什么 当我在显示图像时将颜色贴图作为插件应用时,一切正常,当我直接对图像应用颜色贴图时,它会完全变黑。我很困惑,因为我想将颜色贴图应用到我想保存而不是显示的图像上,我不知道如何正确地执行 import matplotlib.pyplot as plt from skimage import data from skimage.color import rgb2hed ihc_r

通过使用一些scikit图像代码示例和pyplot,我发现图像上的结果不同,这取决于我应用颜色贴图的方式,我不知道为什么

当我在显示图像时将颜色贴图作为插件应用时,一切正常,当我直接对图像应用颜色贴图时,它会完全变黑。我很困惑,因为我想将颜色贴图应用到我想保存而不是显示的图像上,我不知道如何正确地执行

import matplotlib.pyplot as plt
from skimage import data
from skimage.color import rgb2hed


ihc_rgb = data.immunohistochemistry()
ihc_hed = rgb2hed(ihc_rgb)

fig, axes = plt.subplots(2, 2, figsize=(7, 6))
ax0, ax1, ax2, ax3 = axes.ravel()

ax0.imshow(ihc_hed[:, :, 0], cmap=plt.cm.gray)
ax0.set_title("plugin")

ax1.imshow(plt.cm.gray(ihc_hed[:, :, 0]))
ax1.set_title("direct")
[有点像这样]

ihc_hed[:,:,0]内的值介于-1.37和-0.99之间。imshow的默认行为是显示整个值范围。另一方面,plt.cm.gray对值介于0和1之间的图像进行操作


在第一种情况下,自动重新缩放可以节省您的时间,但在第二种情况下却无法节省您的时间。我建议始终使用固定范围的imshow:imshowimage、vmin=0、vmax=1、cmap='gray'

从您对的评论中,我得出结论,您不想保存matplotlib图形,而是直接保存图像。 正如Stefan指出的,在使用colormap之前,需要缩放这些值。Matplotlib为以下对象提供了类Normalize:

import matplotlib.pyplot as plt
import matplotlib.colors
from skimage import data
from skimage.color import rgb2hed

ihc_rgb = data.immunohistochemistry()
ihc_hed = rgb2hed(ihc_rgb)

fig, axes = plt.subplots(1, 3, figsize=(8, 3))
ax0, ax1, ax2 = axes.ravel()

ax0.imshow(ihc_hed[:, :, 0], cmap=plt.cm.gray)
ax0.set_title("plugin")

ax1.imshow(plt.cm.gray(ihc_hed[:, :, 0]))
ax1.set_title("direct")

norm = matplotlib.colors.Normalize()
gray_image = plt.cm.gray(norm(ihc_hed[:,:,0])) 

ax2.imshow(gray_image)
ax2.set_title("direct with norm")

for a in axes:
    a.xaxis.set_visible(False)
    a.yaxis.set_visible(False)

plt.gcf().tight_layout()
plt.show()

我怎样才能重新调整第二个案例的比例?我想将地图应用于我正在保存的图像,而不是显示它。。。谢谢您可以从skimage.exposure导入重缩放强度,然后:重缩放图像=曝光。重缩放强度图像,超出范围=0,1有趣的是,当我应用规范化时,图像不包含小于0和大于1的值,它将变为空白白色。我正在检查规范化选项以找出为什么…它变为空白是什么意思?保存到磁盘后?在保存之前,我无法重现问题,请检查此项,并对我糟糕的代码表示抱歉:它需要一个“资源”文件夹,抱歉,请为要处理的每个图像创建一个新的Normalize实例。如果在创建实例时没有指定它们,那么在第一次调用时,normalizeinternalsets就是vmin和vmax。多谢各位。如果我能接受这两个答案……:'好的Hitzg和Stefan都有很好的答案,但Stefan最终让我走上了正轨。感谢你们两位对这位新手的帮助。对于未来的问题:不要让matplotlib图书馆仅仅为了提问而出现在这里。你的问题实际上是关于缩放SkimagesHanks@hitzg,起初我不知道我的问题是关于缩放。现在我知道了。是我的错,对不起,这有点太过分了。。。无意伤害,无意冒犯;