当前位置: 代码迷 >> python >> 如何基于HSV / RGB值控制图像对比度
  详细解决方案

如何基于HSV / RGB值控制图像对比度

热度:27   发布时间:2023-06-21 10:57:06.0

我想知道是否有可能通过修改图像的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)或类似数据,我想知道是否可以编辑图像的对比度。

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

从RGB过渡到HSL / HSV色彩空间是正确的,因此您可以调整亮度而不影响饱和度和色相。 因此,我基本上已经拍摄了一个暗淡图像的Luminance通道并对其进行了归一化,以使亮度现在覆盖从0..255的整个亮度范围,然后将其放回到图像中。 我从这张图片开始:

并得出了以下结论:

  相关解决方案