【发布时间】:2014-07-21 21:06:34
【问题描述】:
通过 GIMP,我可以轻松地改变色调和饱和度。例如,下面是原图和设置色调为-90,饱和度为100后的最终结果。
如何继续从 Python PIL 获得相同的结果?
原图
最终图片
【问题讨论】:
-
不一样。我想要的是旋转色调。
标签: python image-processing python-imaging-library pillow hue
通过 GIMP,我可以轻松地改变色调和饱和度。例如,下面是原图和设置色调为-90,饱和度为100后的最终结果。
如何继续从 Python PIL 获得相同的结果?
【问题讨论】:
标签: python image-processing python-imaging-library pillow hue
您可以将colorsys 模块和PIL 结合使用,但速度有点慢。 colorsys 允许您将色彩空间更改为 HSV,在此进行色相和饱和度修改是微不足道的。我将饱和度取 0.65 次方来近似您的示例,它保留了 colorsys 所需的 0.0-1.0 范围,同时增加了中间值。
import colorsys
from PIL import Image
im = Image.open(filename)
ld = im.load()
width, height = im.size
for y in range(height):
for x in range(width):
r,g,b = ld[x,y]
h,s,v = colorsys.rgb_to_hsv(r/255., g/255., b/255.)
h = (h + -90.0/360.0) % 1.0
s = s**0.65
r,g,b = colorsys.hsv_to_rgb(h, s, v)
ld[x,y] = (int(r * 255.9999), int(g * 255.9999), int(b * 255.9999))
【讨论】:
我建议将您的图像转换为 numpy 数组,然后应用 matplotlib rgb_to_hsv 函数:http://matplotlib.org/api/colors_api.html#matplotlib.colors.rgb_to_hsv 这样您就可以避免双 for 循环,这可能会导致逐像素方法使用colorsys 要慢。
【讨论】: