I'm trying to use Opencv python to make colorized image from 1 channel class info image. Image is consist of 0 ~ 15 for each pixel.
I saw some code that used PIL putpalette for this work. However, I want to change this code to Opencv.
I made double for loop for this work using list.
the length of list (custom palette) is 256*3 and see belows:
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)
This is code that I made. Input pred is 1 channel image (0~15 each pixel)
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))
Reference PIL Code
pred = Image.fromarray(pred).convert('L')
pred.putpalette(palette)
For loop takes long time. So I want to know is there any opencv function like reference PIL code. Thanks