Конвертировать массив numpy в RGB img с пользовательским поддоном - PullRequest
0 голосов
/ 14 мая 2018

Я хочу преобразовать numpy.ndarray:

out = [[12 12 12 ..., 12 12 12]
     [12 12 12 ..., 12 12 12]
     [12 12 12 ..., 12 12 12]
     ...,
     [11 11 11 ..., 10 10 10]
     [11 11 11 ..., 10 10 10]
     [11 11 11 ..., 10 10 10]]

в RGB img.

Цвета взяты из массива:

colors_pal = np.array(
           [0,0,128],      #ind 0
           [0,0,0],
           ....
           [255,255,255]], #ind 12
           dtype=np.float32)

Так, например, все пиксели с индексом 12 будут белыми (255 255 255).
Способ, которым я делаю это сейчас, очень медленный (около 1,5 сек / мм):

        data = np.zeros((out.shape[0],out.shape[1],3), dtype=np.uint8 )
        for x in range(0,out.shape[0]):
            for y in range(0,out.shape[1]):
                data[x,y] = colors_pal[out[x][y]]
        img = Image.fromarray(data)
        img.save(...)

Какой эффективный способ сделать это быстрее?

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете просто использовать полное изображение в качестве индекса для справочной таблицы.

Что-то вроде data = colors_pal[out]

import numpy as np
import matplotlib.pyplot as plt
import skimage.data
import skimage.color

# sample image, grayscale 8 bits
img = skimage.color.rgb2gray(skimage.data.astronaut())
img = (img * 255).astype(np.uint8)
# sample LUT from matplotlib
lut = (plt.cm.jet(np.arange(256)) * 255).astype(np.uint8)

# apply LUT and display
plt.imshow(lut[img])
plt.show()

result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...