首页 > 解决方案 > 如何根据 HSV/RGB 值控制图像对比度

问题描述

我想知道是否可以通过修改图像的 RGB、HSV(或类似)值来修改图像的对比度。

我目前正在执行以下操作来处理亮度、饱和度和色调(在 python 中):

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 是 alpha 通道,h 是色调,s 是饱和度,new_v 是新的 V 值(亮度)。

是否可以根据这些值编辑对比度,还是我遗漏了什么?

编辑:我有一个单独的函数,可以导入图像、提取 RGBA 值并将它们转换为 HSL/HSV。让我们调用这个函数 x。

在提供的代码(函数 y)中,我们采用某些图像的色调(h)、饱和度(s)、亮度(v)和 alpha 通道(a)——函数 x 提供的 HSL 值。

代码编辑 V 值或亮度。它实际上并没有编辑对比度,它只是我想要实现的一个例子。使用上述数据(HSL/HSV/RGB)或类似数据,我想知道是否可以编辑图像的对比度。

标签: pythonimageimage-processingrgbhsl

解决方案


我发现很难理解你在你的问题中想要做什么,所以这里有一个“黑暗中的刺”,你试图在不改变颜色的情况下增加图像的对比度。

从 RGB 到 HSL/HSV 色彩空间是正确的,这样您就可以在不影响饱和度和色调的情况下调整亮度。因此,我基本上采用了暗图像的亮度通道并将其归一化,以便亮度现在跨越从 0..255 的整个亮度范围,然后将其放回图像中。我从这张图片开始:

在此处输入图像描述

最后得到了这个:

在此处输入图像描述


推荐阅读