如何用dtype = float显示numpy NxM数组作为普通灰度图像?

时间:2017-05-01 07:37:46

标签: python numpy matplotlib

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

使用此代码模板:

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]]显示为:

enter image description here

但是图片[[1.0, 1.0], [1.0, 0.5]],其中只有0.0更改为1.0,显示为:

enter image description here

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

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

2 个答案:

答案 0 :(得分:3)

您必须修正色阶的限制:

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会更新颜色范围到数据的范围。因此,对于两种情况,颜色和数值之间的转换是不同的。

答案 1 :(得分:0)

发现默认情况下imshow会进行规范化,因此要避免这种情况,vminvmax必须提供给imshow,然后是:

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