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

问题描述 投票:1回答:2

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

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

我想使用tkinter将这个分割蒙版加载到画布中,所以我需要从中创建一个图像,并且我需要每个值0-60对应于其色调尽可能不同的颜色。

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

python numpy colors
2个回答
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补充道:


2
投票

恕我直言,显而易见的事情是做一个palettised图像,你有一个60色的调色板和每个位置调色板的索引。使用PIL / Pillow非常简单。

现在你来选择这60种颜色。我会想到使用HSL(色调,饱和度和亮度)色彩空间。现在您需要60个不同的值。因此,您可以对所有像素使用完全饱和度和亮度,并将可用的360度色调扩展为6度块,用于60种颜色。或者您可以使用100%亮度和50%亮度加上100%饱和度和50%饱和度来提供4倍的亮度/饱和度组合,这意味着您可以旋转24度色调以获得更大的分离效果。

有关如何从Numpy数组制作图像,向图像添加调色板以及制作Pillow图像和保存的示例,请参阅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   ...
© www.soinside.com 2019 - 2024. All rights reserved.