根据RGB值更改图像的颜色
情况:
你有一个主色的图像,你需要根据给定的rgb值将它转换为另一个。
问题:
有许多不同但相似的颜色也需要转换,这使得简单的“全部变化(0,0,0)像素到(0,100,200)”解决方案变得毫无价值。
如果任何人都可以指向正确的方向,只要算法或图像处理技术可以让这项任务更加易于管理,那就太棒了。
我一直在使用PIL来尝试这个问题,但任何一般的技巧都会很好。
编辑:
此外,我已经使用了这个其他的答案(用Python PIL改变图像色调)来完成我所要求的部分(色调变化),但是它没有考虑饱和度或值
编辑:http://dpaste.org/psk5C/显示使用pil来看看我必须使用的rgb值和hsv的值。
参考链接问题中的解决方案:您可以调整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
链接地址: http://www.djcxy.com/p/62349.html