Вы должны иметь возможность использовать векторизацию Numpy для этого, если вы проведете свой argmax()
через третье измерение, то есть через цветовые каналы.
Не проверено, но что-то вроде этого:
# Make array of brightest colour index
m = np.argmax(im, axis=2)
# Make empty results array same shape as original image
res = np.zeros_like(im)
# Where blue is the brightest, make result blue
res[m==0] = [255,0,0]
# Where green is the brightest, make result green
res[m==1] = [0,255,0]
# Where blue is the brightest, make result blue
res[m==2] = [0,0,255]
Я думаю, что это более кратко:
import cv2
import numpy as np
# Load image
im = cv2.imread('colorwheel.jpg')
# Find index of brightest channel at each point
m = np.argmax(im,axis=2)
# Set up possible choices for output colour
choices = [[255,0,0],[0,255,0],[0,0,255]]
# Choose one of the 3 colours based on whichever was brightest
res = np.choose(m[...,np.newaxis],choices)
# Save
cv2.imwrite('result.png',res)
Исходное изображение:
Результат:
Ключевые слова : Python, обработка изображений, простое квантование, применение цветовой карты, палитра, LUT, поиск, np. выбрать.