首页 > 解决方案 > 怎么把图片变成黑白

问题描述

我正在尝试将我的一些图片转换为黑白。到目前为止我有这个

import image 

def black_and_white(pic): 

    for y in range(pic.getHeight()): 
        for x in range(pic.getWidth()): 
            p = pic.getPixel(x,y) 

            r = p.getRed() 
            g = p.getGreen()
            b = p.getBlue()

            if x > 0.128:
                x = .255 * r + .255 * g +.255 * b
            else: 
                x = .0 * r + .0 * g +.0 * b

            x = int(x) ## to convert it to an integer 
            newp = image.Pixel(x, x, x) ## to convert to a new pixel 
            pic.setPixel(x, y, newp) 
    return pic 

def main(): 

    bell = image.Image("luther.jpg") 

    width = bell.getWidth() 

    height = bell.getHeight()

    win = image.ImageWin(width, height) 

    bell.draw(win) 

    gs_bell = grayscale(bell)

    gs_bell.draw(win) 


main() ## starts execution 

如果有人能给我一些建议,我将不胜感激!

对于缺乏明确性,我真的很抱歉。这是我得到的图像。 在此处输入图像描述

标签: pythonimage-processing

解决方案


你的代码有很多错误。x当它实际上是像素坐标时,您将其用作像素值。

我会改变这个:

            if x > 0.128:
                x = .255 * r + .255 * g +.255 * b
            else: 
                x = .0 * r + .0 * g +.0 * b

            x = int(x) ## to convert it to an integer 
            newp = image.Pixel(x, x, x) ## to convert to a new pixel

对此:

            v = 0.2989 * r + 0.5870 * g + 0.1140 * b
            if v > 128.0:
                v = 255
            else: 
                v = 0

            v = int(v) ## to convert it to an integer 
            newp = image.Pixel(v, v, v) ## to convert to a new pixel

RGB 权重值来自这篇文章


推荐阅读