Как управлять контрастом изображения на основе значений HSV / RGB - PullRequest
0 голосов
/ 23 сентября 2018

Мне было интересно, можно ли изменить контраст изображения, изменив его значения RGB, HSV (или аналогичные).

В настоящее время я делаю следующее, чтобы связываться с яркостью, насыщенностью и оттенком (в питоне):

import numpy as np
from PIL import Image as img
import colorsys as cs

#Fix colorsys rgb_to_hsv function
#cs.rgb_to_hsv only works on arrays of shape: [112, 112,255] and non n-dimensional arrays
rgb_to_hsv = np.vectorize(cs.rgb_to_hsv)
hsv_to_rgb = np.vectorize(cs.hsv_to_rgb)

def luminance_edit(a, h, s, new_v):
    #Edits V - Luminance

    #Changes RGB based on new luminance value
    r, g, b = hsv_to_rgb(h, s, new_v)

    #Merges R,G,B,A values to form new array
    arr = np.dstack((r, g, b, a))

    return arr

У меня есть отдельная функция для преобразования в RGB и HSV и обратно.A - это альфа-канал, h - это оттенок, s - это насыщенность, а new_v - это новое значение V (яркость).

Можно ли редактировать контраст на основе этих значений или я что-то упустил?

Редактировать: у меня есть отдельная функция, которая импортирует изображения, извлекает значения RGBA и преобразует их в HSL / HSV.Позволяет вызвать эту функцию х.

В представленном коде (функция y) мы берем hue (h), насыщенность (s), яркость (v) и альфа-канал (a) - значения HSL, предоставленные функцией x, некоторыхобраз.

Код редактирует значение V или яркость.Это на самом деле не редактирует контраст, это всего лишь пример того, чего я хочу достичь.Используя приведенные выше данные (HSL / HSV / RGB) или аналогичные, мне было интересно, можно ли редактировать контраст изображения.

1 Ответ

0 голосов
/ 24 сентября 2018

Мне очень трудно понять, что вы пытаетесь сделать в своем вопросе, поэтому вот "1001 *" удар в темноте ", который вы пытаетесь увеличить контрастность изображения, не меняя цвета.

Вы правы при переходе от RGB к цветовому пространству HSL / HSV, так что вы можете регулировать яркость, не влияя на насыщенность и оттенок.Итак, я в основном взял канал яркости мрачного изображения и нормализовал его так, чтобы яркость теперь охватывал весь диапазон яркости от 0..255, и поместил его обратно в изображение.Я начал с этого изображения:

enter image description here

И закончил этим:

enter image description here

...