将numpy数组中的值可视化为位图中的颜色

时间:2018-11-27 21:27:42

标签: python numpy colors

我得到了一个分割蒙版:一个HxW numpy数组,其中每个位置代表一个像素。但是,每个位置的值都不是RGB。它是一个0-60范围内的任意整数,其中的整数只是表示图像内容类型的代码。

例如值为12的数组位置表示归类为“表格”的像素;值为34的位置表示归类为“地毯”的像素。

我想使用tkinter将此分段蒙版加载到画布中,所以我需要用它制作图像,并且我需要每个0-60值来对应其色相截然不同的颜色可以。

如何选择这些颜色?如何将HxW阵列转换为RGB图像?

2 个答案:

答案 0 :(得分:2)

恕我直言,要做的显而易见的事情是制作一个调色板化的图像,其中您有60种颜色的调色板,并且在每个位置都有索引到调色板中。使用PIL /枕头非常简单。

现在您要选择这60种颜色。我会考虑使用HSL(色相,饱和度和亮度)色彩空间。现在您需要60个不同的值。因此,您可以对所有像素使用完全的饱和度和亮度,然后将可用的360度色相分布为6种颜色,以显示60种颜色。或者,您可以使用100%亮度和50%亮度加上100%饱和度和50%饱和度为您提供4倍的亮度/饱和度组合,这意味着您可以将色相旋转24度以获得更大的分离度。

有关如何从Numpy数组制作图像,向图像添加调色板并将其制作为枕头图像并保存的示例,请参见here

我基本上建议使用60个条目的调色板,并具有以下值:

Hue, Saturation, Lightness
0    50%         50%
0    50%         100%
0    100%        50%
0    100%        100%
23   50%         50%
23   50%         100%
23   100%        50%
23   100%        100%
47   50%         50%
47   50%         100%
47   100%        50%
47   100%        100%
61   ...

答案 1 :(得分:2)

您不需要转换为RGB。只需将pcolor与适当的颜色图一起使用。

它可能像这样简单:

import matplotlib.pyplot as plt
import numpy

M = numpy.array([[1,2,3,4,5,6,7,8,9,10], [11,12,13,14,15,16,17,18,19,20]])
plt.pcolor( M , cmap = 'hsv' )
plt.show()

由Mark Setchell添加: