Есть ли в OpenCV Python такая функция, как pil putpalette? - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь использовать Opencv Python для создания цветного изображения из 1-го канала информации о классе. Изображение состоит из 0 ~ 15 для каждого пикселя.

Я видел некоторый код, который использовал PIL putpalette для этой работы. Однако я хочу изменить этот код на Opencv.

Я сделал двойной цикл for для этой работы, используя список.

длина списка (пользовательская палитра) составляет 256 * 3 и см. Ниже:

palette = [0, 0, 0, # r g b for pixel 0 

           128,0,0, # r g b for pixel 1

           0, 255, 0, # r g b for pixel 2

           ...
           0, 255, 128 # r g b for pixel 15
           ]
zero_pad = 256 * 3 - len(palette)
for i in range(zero_pad):
    palette.append(0)

Это код, который я сделал. В качестве входного сигнала используется 1-канальное изображение (0 ~ 15 на каждый пиксель)

pred_r = np.zeros_like(pred)
pred_g = np.zeros_like(pred)
pred_b = np.zeros_like(pred)

for x in range(0, pred.shape[0]):
    for y in range(0, pred.shape[1]):
        pred_r[x][y] = palette[pred[x][y] * 3]
        pred_g[x][y] = palette[pred[x][y] * 3 + 1]
        pred_b[x][y] = palette[pred[x][y] * 3 + 2]

colorized_pred = cv2.merge((pred_b, pred_g, pred_r))

Код ссылки PIL

pred = Image.fromarray(pred).convert('L')
pred.putpalette(palette)

Для цикла требуется длительное время. Итак, я хочу знать, есть ли какая-нибудь функция opencv, такая как ссылочный код PIL. Спасибо

...