如何正确显示具有特定颜色范围的图像

时间:2017-11-06 10:38:44

标签: python matplotlib

我有一些.png张图片被用作面具。这些掩模的问题在于它们只包含一些值,例如:只有12个值0-11。我希望能够以有用的(对我来说)方式显示它们,这意味着能够在光学上区分不同的值。

我尝试过这种方法:

from PIL import Image 
import numpy as np 
im = Image.open('mask.png')
im.show()  # it all black but different values exist
len(set(list(im.getdata())))
a = 255 / np.amax(np.array(im))
im = im * a
im = Image.fromarray(im)
im.show()

只是将[0,11]值投影到[0,255]值,但它看起来太尴尬和低效。它包含太多的转换,只是简单地显示我的图像。

我还试图将matplotlib.pyplotcolormap选项一起使用,但在此过程中丢失了,并且无法找到如何指定我的值范围。

  1. 是否可以使用PILpillow
  2. 正确显示我的图片
  3. 使用matplotlib
  4. 实现上述目标的方法是什么?

    很明显,我对数据的确切表示并不感兴趣,因此使用上述方法进行舍入错误无关紧要。

    编辑:

    如果它更清晰,我的图像是灰度图像,范围从0到小值:[0, N], N << 255。像(玩具示例)那样:

    w, h = 20, 20
    data = np.zeros((h, w))
    data[5:10, 10:20] = 1
    data[6:10, 0:15] = 2
    data[10:15, 4:15] = 4
    # it's displayed as a black image
    Image.fromarray(data).show()
    # it's displayed as image with distinguishable values
    Image.fromarray(data*255/np.amax(data)).show()
    

1 个答案:

答案 0 :(得分:2)

您可以使用imshow()在matplotlib中可视化数组,并使用颜色条轻松显示颜色代表的内容:

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image 

# If not using fake data:
# im = Image.open('mask.png')
# data = np.array(im)

data = np.random.randint(0,12,(6,6)) # random values between 0 and 11

fig, ax = plt.subplots()

im = ax.imshow(data)
plt.colorbar(im, ax=ax)

plt.show()

enter image description here

您可以使用vmin中的vmaximshow()参数更改颜色栏的范围(以及显示数据):

im = ax.imshow(data, vmin=0, vmax=20)

enter image description here