【问题标题】:How to show numpy NxM array with dtype=float as plain gray scale image?如何将 dtype=float 的 numpy NxM 数组显示为纯灰度图像?
【发布时间】:2017-05-01 16:10:12
【问题描述】:

使用dtype=float 创建numpy 数组时,使用matplotlib.pyplot.imshow 的表示方法似乎取决于值,因此0.50 的值不仅仅是50% 的灰色。

使用此代码模板:

import numpy as np
import matplotlib.pyplot as plt
img = np.empty([2, 2])
img[:] = {image}
plt.imshow(img, cmap='gray')
plt.show()

然后图片[[1.0, 1.0], [0.0, 0.5]]显示为:

但是图片[[1.0, 1.0], [1.0, 0.5]],只有0.0变成了1.0,显示为:

我曾预计 0.5(位于右下方)在这两种情况下都会显示为 50% 的灰色,但由于某种原因,表示方法发生了变化,因此 0.5 的解释不同,具体取决于数组中其他元素的值。

那么,如何将 dtype=float 的 numpy NxM 数组显示为普通灰度图像?

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案1】:

    你必须修正色阶的限制:

    plt.imshow(img, cmap='gray',clim=(0,1))
    

    为了更好地了解正在发生的事情,您可以添加一个颜色条,以可视化颜色和数值之间的转换;例如使用以下代码:

    fig,ax = plt.subplots()
    cax = plt.imshow(img, cmap='gray')
    cbar = fig.colorbar(cax)
    plt.show()
    

    对这两个示例执行此操作立即清楚地表明 matplotlib.pyplot 将色标范围更新为数据。因此,对于这两种情况,颜色和数值之间的转换是不同的。

    【讨论】:

    • 谢谢,对颜色条很有帮助:-)
    【解决方案2】:

    发现imshow默认会正常化,所以为了避免这种情况,vminvmax必须给imshow,然后是:

    plt.imshow(img, cmap='gray', vmin=0, vmax=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-13
      • 2014-06-02
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多