7

情况:

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

问题:

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

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

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

编辑:

另外,我使用了另一个 SO 答案(使用 Python PIL 更改图像色调)来完成我所要求的部分内容(色调变化),但它没有考虑饱和度或值

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

4

1 回答 1

4

参考链接问题中的解决方案:您可以调整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
于 2012-08-06T18:03:49.550 回答