通过PIL和colorsys将RGB转换为HSV

时间:2014-03-06 21:59:38

标签: python python-imaging-library rgb hsv

我编写了一个从RGB转换图像的功能> HSV。但是,当我保存新图像时,我唯一得到的是黑色图像。我该怎么办才能解决它?

非常感谢任何帮助!

我的代码:

def HSVColor(img):
    if isinstance(img,Image):
        r,g,b = img.split()
        Hdat = []
        Sdat = []
        Vdat = [] 
        for rd,gn,bl in zip(r.getdata(),g.getdata(),b.getdata()) :
            h,s,v = colorsys.rgb_to_hsv(rd/255.,gn/255.,bl/255.)
            Hdat.append(int(h*255.))
            Sdat.append(int(l*255.))
            Vdat.append(int(s*255.))
        r.putdata(Hdat)
        g.putdata(Sdat)
        b.putdata(Vdat)
        return Image.merge('RGB',(r,g,b))
    else:
        return None

3 个答案:

答案 0 :(得分:13)

仅供参考,最近有一份Pillow,应该使用

def rgb2hsv(image):
    return image.convert('HSV')

答案 1 :(得分:4)

我认为你正在尝试做不可能的事情,尽管你可以将rgb转换为hsv颜色(反之亦然)值,根据wikipedia jpg图像只能存储在rgb或cmyk模型中。

答案 2 :(得分:2)

您是不是混合了模块Image及其类Image

以下代码适用于我(更改isinstance(img,Image.Image)部分):

import Image, colorsys    

def HSVColor(img):
    if isinstance(img,Image.Image):
        r,g,b = img.split()
        Hdat = []
        Sdat = []
        Vdat = [] 
        for rd,gn,bl in zip(r.getdata(),g.getdata(),b.getdata()) :
            h,s,v = colorsys.rgb_to_hsv(rd/255.,gn/255.,bl/255.)
            Hdat.append(int(h*255.))
            Sdat.append(int(s*255.))
            Vdat.append(int(v*255.))
        r.putdata(Hdat)
        g.putdata(Sdat)
        b.putdata(Vdat)
        return Image.merge('RGB',(r,g,b))
    else:
        return None

a = Image.open('/tmp/a.jpg')
b = HSVColor(a)
b.save('/tmp/b.jpg')