Problems with using a rough greyscale algorithm?

前端 未结 7 2113
生来不讨喜
生来不讨喜 2021-02-06 20:43

So I\'m designing a few programs for editing photos in python using PIL and one of them was converting an image to greyscale (I\'m avoiding the use of

7条回答
  •  庸人自扰
    2021-02-06 20:48

    The answers provided are enough, but I want to discuss a bit more on this topic in a different manner.

    Since I learnt digital painting for interest, more often I use HSV.

    It is much more controllable for using HSV during painting, but keep it short, the main point is the S: Saturation separating the concept of color from the light. And turning S to 0, is already the 'computer' grey scale of image.

    from PIL import Image
    import colorsys
    
    def togrey(img):
        if isinstance(img,Image.Image):
            r,g,b = img.split()
            R = []
            G = []
            B = [] 
            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.)
                s = 0
                _r,_g,_b = colorsys.hsv_to_rgb(h,s,v)
                R.append(int(_r*255.))
                G.append(int(_g*255.))
                B.append(int(_b*255.))
            r.putdata(R)
            g.putdata(G)
            b.putdata(B)
            return Image.merge('RGB',(r,g,b))
        else:
            return None
    
    a = Image.open('../a.jpg')
    b = togrey(a)
    b.save('../b.jpg')
    

    This method truly reserved the 'bright' of original color. However, without considering how human eye process the data.

提交回复
热议问题