2013-08-06 23 views
1

我想嘗試從網上教自己的python。沒有以前的prg經驗。需要關於如何使用python中的'image'模塊編寫一個函數來從imgae中刪除紅色。我試圖寫的代碼如下... do help函數刪除圖像中的紅色使用Python模塊圖像

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() 

我在做什麼錯了?任何指導將有助於:)

問候>>

回答

1

你必須調用newimg.setPixelfor環內,否則將只能在圖像的末端一路更換一個像素:

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) 
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) 

這是做在我看來,最簡單的方法

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()