1

我正在尝试从网上自学python。没有以前的prg经验。需要有关如何编写函数以使用 python 中的“图像”模块从 imgae 中删除红色的帮助。我尝试编写的代码如下...帮助

import image

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

newimg = image.EmptyImage(img.getWidth(),img.getHeight())

win = image.ImageWin()

def no_red():
    for col in range(img.getWidth()):
        for row in range(img.getHeight()):
            p = img.getPixel(col,row)
            newred = 0
            newgreen = p.getGreen()
            newblue = p.getBlue()
            newpixel = image.Pixel(newred,newgreen,newblue)
    return newimg.setPixel(col,row,newpixel)



print (newimg.getPixel(45,52))
win.exitonclick()

我究竟做错了什么?任何指导都会有所帮助:)

问候>>

4

3 回答 3

1

您必须newimg.setPixel在循环内部调用for,否则它只会在图像末尾一直替换一个像素:

def no_red():
    for col in range(img.getWidth()):
        for row in range(img.getHeight()):
            p = img.getPixel(col,row)
            newred = 0
            newgreen = p.getGreen()
            newblue = p.getBlue()
            newpixel = image.Pixel(newred,newgreen,newblue)
            newimg.setPixel(col,row,newpixel)

你也没有no_red在任何地方打电话。我建议改写这样的东西:

def no_red(image):
    new_image = ... # make a copy of image
    # original code that removes red subpixels
    return new_image

然后调用:

new_image = no_red(original_image)
于 2013-08-06T10:53:52.853 回答
1
for i in range(img.getWidth()):
        for j in range(img.getHeight()):
            old_pixel = img.getPixel(i, j)
            new_pixel = image.Pixel(0, old_pixel.getGreen(), old_pixel.getBlue())
            new_image.setPixel(i, j, new_pixel)

这是我认为最简单的方法

于 2014-03-25T13:37:16.530 回答
0

如果您不想被循环卡住,您可能会发现以下几行更有用。以下行从图像测试中删除 RED。

def removeColour():
        img =  Image.open('test.png').convert('RGB')
        source = img.split()
        R, G, B = 0, 1, 2
        out = source[R].point(lambda i: i * 0)
        source[R].paste(out, None, None)
        img = Image.merge(img.mode, source)
        img.save('testNoRed.png')
        img.show()
于 2014-11-04T10:05:51.257 回答