python 将图像中的灰度值Map为RGB值

8ulbf1ek  于 2023-02-18  发布在  Python
关注(0)|答案(2)|浏览(169)

让我们考虑一个灰度值,其值在[0,255]的范围内,我们如何有效地将每个值Map到RGB值?
到目前为止,我已经提出了以下实现:

# function for colorizing a label image:
def label_img_to_color(img):
    label_to_color = {
    0: [128, 64,128],
    1: [244, 35,232],
    2: [ 70, 70, 70],
    3: [102,102,156],
    4: [190,153,153],
    5: [153,153,153],
    6: [250,170, 30],
    7: [220,220,  0],
    8: [107,142, 35],
    9: [152,251,152],
    10: [ 70,130,180],
    11: [220, 20, 60],
    12: [255,  0,  0],
    13: [  0,  0,142],
    14: [  0,  0, 70],
    15: [  0, 60,100],
    16: [  0, 80,100],
    17: [  0,  0,230],
    18: [119, 11, 32],
    19: [81,  0, 81]
    }

img_height, img_width = img.shape

img_color = np.zeros((img_height, img_width, 3))
for row in range(img_height):
    for col in range(img_width):
        label = img[row, col]
        img_color[row, col] = np.array(label_to_color[label])
return img_color

但是,正如您所看到的,它效率不高,因为有两个“for”循环。
Convert grayscale value to RGB representation?中也提出了这个问题,但没有提出有效的实现。

iswrvxsc

iswrvxsc1#

代替在所有像素上执行double for循环的更有效的方法可以是:

rgb_img = np.zeros((*img.shape, 3)) 
for key in label_to_color.keys():
    rgb_img[img == key] = label_to_color[key]
ilmyapht

ilmyapht2#

我写了几乎相同的问题,在问题回顾中我发现了@MattSt 's answer。为了子孙后代,下面是我将要问的问题:

如何将灰度图像转换为RGB图像,给定使用NumPy的像素Map函数?

我有一个字典可以将标签Map到颜色。但是我不知道如何使用提供的Map将2D标签Map有效地转换为2D彩色图像。

label_to_color = {0: [0, 0, 0], 1: [255, 0, 0], 2: [0, 0, 255], 3: [0, 128, 0]}

def label_map_to_color(label_map):
    color_map = np.empty(
        (label_map.shape[0], label_map.shape[1], 3), dtype=np.uint8
    )
    for k in range(label_map.shape[0]):
        for i in range(label_map.shape[1]):
            color_map[k, i, :] = label_to_color[(label_map[k, i])]
    return color_map

但一定有更有效的方法来完成这件事?

相关问题