我在图片上找到了不同的结果,这取决于我如何应用我的彩色地图,我不知道为什么。
当我把彩色地图作为显示图像的插件时,一切正常,当我直接对图像做时,它会完全变黑。我很困惑,因为我想把彩色地图应用到我想要保存(而不是显示)的图像上,我不知道如何正确地处理它。
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")这事有点进展

发布于 2014-12-03 02:00:41
ihc_hed[:, :, 0]内部的值介于-1.37至-0.99之间。imshow的默认行为是显示整个范围的值。另一方面,plt.cm.gray对值介于0和1之间的图像进行操作。
自动重标度在第一种情况下是在保存,而不是在第二种情况下。我建议始终在固定范围内使用imshow:imshow(image, vmin=0, vmax=1, cmap='gray')
发布于 2014-12-03 10:22:47
从您对Stefan van der Walt的answer的评论中,我得出结论,您不想保存matplotlib图形,而是直接保存图像。正如斯特凡所指出的,在使用颜色图之前,需要缩放值。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()

https://stackoverflow.com/questions/27260871
复制相似问题