OpenCV: установите яркость каждого пикселя RGB таким образом, чтобы самый яркий канал (R, G или B) был максимальным - PullRequest
2 голосов
/ 16 октября 2019

Для каждого пикселя в изображении RGB я хочу увеличить его яркость, чтобы максимальный канал этого пикселя (R, G или B) был максимально увеличен. Например, если пиксель имеет значение RGB (128, 64, 32), а максимальное значение канала составляет 255, то этот пиксель должен быть изменен примерно на (255, 128, 64). Это что-то вроде системы удаления теней бедного человека.

Я могу сделать это путем явной итерации пикселей, но это очень неэффективно. Какой самый эффективный способ сделать это, используя строго OpenCV методы? Кажется, он может использовать пространство YUV?

(Кстати, я использую C # с EmguCV, но прямой ответ Python / OpenCV был бы хорош. РЕДАКТИРОВАТЬ: Но я не могу использовать библиотеки Python)

1 Ответ

1 голос
/ 16 октября 2019

В Python изображения OpenCV представляют собой просто массив. Итак, вот подход python / numpy:

# toy sample
np.random.seed(1)
a = np.random.randint(0, 100, (4,4,3), dtype=np.uint8)

# get max values across channels, scaled by 255
maxx = np.max(a, axis=-1)/255

# scale a by maxx
a = (a / maxx[:,:, None]).astype(np.uint8)

Ввод (с plt.imshow(), поэтому в rgb):

enter image description here

Вывод:

enter image description here

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