【问题标题】:Changing the color of an image based on RGB value根据 RGB 值更改图像的颜色
【发布时间】:2012-08-03 15:31:28
【问题描述】:

情况:

您有一个具有 1 种主要颜色的图像,您需要根据给定的 rgb 值将其转换为另一种颜色。

问题:

该颜色有许多不同但相似的阴影也需要转换,这使得简单的“将所有(0,0,0)像素更改为(0,100,200)”解决方案毫无价值.

如果有人可以为我指出正确的方向,就可以使这项任务更易于管理的算法或图像处理技术,那就太好了。

我一直在使用 PIL 来尝试这个问题,但任何一般的提示都会很好。

编辑:

另外,我已经使用了这个其他 SO 答案 (Changing image hue with Python PIL) 来完成我所要求的部分内容(色调变化),但它没有考虑饱和度或值

编辑:http://dpaste.org/psk5C/ 显示使用 pil 查看我必须使用的 rgb 值以及与之相关的 hsv。

【问题讨论】:

  • 您是说整个图像由这一种颜色的变体组成?还是图像的某些部分不会改变?
  • 一般的例子是一个小图标。 Alpha 背景,单色,边缘混合。到目前为止,我对灰色或白色的色调没有任何问题,因为它们的颜色主要由饱和度和值(我没有操纵)控制,所以我可以整天改变色调,而这些不会受到影响跨度>

标签: python image-processing image-manipulation python-imaging-library


【解决方案1】:

参考链接问题中的解决方案:您可以调整shift_hue()函数来调整色调、饱和度和值,而不仅仅是色调。然后,您应该可以随意更改所有这些参数。

原文:

def shift_hue(arr, hout):
    r, g, b, a = np.rollaxis(arr, axis=-1)
    h, s, v = rgb_to_hsv(r, g, b)
    h = hout
    r, g, b = hsv_to_rgb(h, s, v)
    arr = np.dstack((r, g, b, a))
    return arr

调整版:

def shift_hsv(arr, delta_h, delta_, delta_v):
    r, g, b, a = np.rollaxis(arr, axis=-1)
    h, s, v = rgb_to_hsv(r, g, b)
    h += delta_h
    s += delta_s
    v += delta_v
    r, g, b = hsv_to_rgb(h, s, v)
    arr = np.dstack((r, g, b, a))
    return arr

假设您知道原始图像的基色和所需的目标颜色,您可以轻松计算增量:

base_h, base_s, base_v = rgb_to_hsv(base_r, base_g, base_b)
target_h, target_s, target_v = rgb_to_hsv(target_r, target_g, target_b)
delta_h, delta_s, delta_v  = target_h - base_h, target_s - base_s, target_v - base_v

【讨论】:

  • 假设您可以根据给定的 RGB 准确找到增量,这看起来会起作用。我不太相信 += 会做到这一点。我正在努力获得 RGB 值之间差异的准确百分比,以便此处的 delta 参数实际上是有用的。除非你能举例说明你会使用什么作为增量值?
  • 您有具体的“基色”和“目标色”(以 rgb 为单位)吗?
  • 代码必须处理这个问题。如果我的图像大部分为 0,100,200,并且我想将其更改为 100,100,50,则代码必须计算出 HSV 百分比变化(我在想)如,通过将原始 rgb 的 hsv 相除来计算增量由新的 rgb 的 hsv。 ..这让打字变得如此混乱。代码要简洁得多,所以我将努力提供一个例子来说明我的意思
  • 我刚刚添加了如果你有这些颜色你可以做什么。基本上,目标是您想要的,因此是已知的。基色可以是您拥有的图像的平均颜色。视具体要求而定。 (或者你找出一个应该使用的颜色值)
  • 我接受了你的回答,因为它提供了大多数人在这种情况下需要的东西。这是对这些东西的一个很好的概述,如果我弄清楚我打算这样做的方式,我会添加一个编辑。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 2023-04-05
  • 2017-07-10
  • 2017-08-23
相关资源
最近更新 更多