【问题标题】:How to control image contrast based on HSV/RGB values如何根据 HSV/RGB 值控制图像对比度
【发布时间】:2023-03-02 22:42:01
【问题描述】:

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

【问题讨论】:

  • 您的代码似乎没有加载任何图像或调用您的luminance_edit() 函数?你的描述说你打算用亮度和饱和度来“混乱”,这根本没有多大帮助。问题是什么,您试图实现的不完整代码是什么,哪些方面不起作用?
  • 我的回答解决了你的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 meta.stackexchange.com/questions/5234/…

标签: python image image-processing rgb hsl


【解决方案1】:

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

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

最后得到了这个:

【讨论】:

  • 它的代码是什么? :D
  • @CristianoCoelho 我没有添加代码,因为 OP 对这是否是他想要的没有反应。不过,我的回答中描述了该技术。
  • 我试图理解你的方法是什么,但对我来说,改变 HSV 图像的 V 值似乎只是一个“亮度”调整。我实际上正在做这样的事情来从代码中编辑图像,修改 V 通道是我的亮度调整实现(例如,V = V * 1.2 将亮度增加 20%)。饱和度也是如此,S = S * 1.2,所以我不确定对比度会落在等式中的哪个位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2019-02-05
相关资源
最近更新 更多