我有一些.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.pyplot
与colormap
选项一起使用,但在此过程中丢失了,并且无法找到如何指定我的值范围。
PIL
或pillow
?matplotlib
?很明显,我对数据的确切表示并不感兴趣,因此使用上述方法进行舍入错误无关紧要。
编辑:
如果它更清晰,我的图像是灰度图像,范围从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()
答案 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()
您可以使用vmin
中的vmax
和imshow()
参数更改颜色栏的范围(以及显示数据):
im = ax.imshow(data, vmin=0, vmax=20)