2015-03-16 3 views
2

Я пытаюсь сделать изображение, которое находится в квадрантах с вариациями на цветах enter image description here в каждом из них. Мне удалось сделать половину изображения, но другая половина просто размывается - и нет сообщения об ошибке. Любая идея, что происходит не так? Я хочу, чтобы оттенки серого в верхнем правом углу, и черно-белый в нижнем правом углуПоловина изображения размыты в заявлениях elif

Вот мой код:

import cImage as image 

img = image.Image("/home/users/groth1/Downloads/selfie.JPG") 
newimg = image.EmptyImage(img.getWidth(), img.getHeight()) 
win = image.ImageWin(title="Pic",width=img.getWidth(),height=img.getHeight()) 
img.draw(win) 

xQuadrantBoundary = img.getWidth()//2 
yQuadrantBoundary = img.getHeight()//2 

for row in range(img.getHeight()): 
for col in range(img.getWidth()): 
    p = img.getPixel(col, row) 

    if row < yQuadrantBoundary: 
     if col < xQuadrantBoundary: 
      # upper left negative 
      newred = 255 - p.getRed() 
      newgreen = 255 - p.getGreen() 
      newblue = 255 - p.getBlue() 
      newpixel1 = image.Pixel(newred, newgreen, newblue) 

      img.setPixel(col, row, newpixel1) 
     elif col >= xQuadrantBoundary: 
      # upper right grayscale *** 
      red = p.getRed() 
      green = p.getGreen() 
      blue = p.getBlue() 
      avg = (red + green + blue)/3.0 
      newpixel2 = image.Pixel(newred, newgreen, newblue) 
      img.setPixel(col, row, newpixel2) 

    elif row >= yQuadrantBoundary: 
     if col < xQuadrantBoundary: 
      # lower left no green 
      newred = p.getRed() 
      newgreen = 0 
      newblue = p.getBlue() 
      newpixel3 = image.Pixel(newred, newgreen, newblue) 
      img.setPixel(col, row, newpixel3) 
     elif col >= xQuadrantBoundary: 
      # lower right black and white *** 
      red = p.getRed() 
      if red > 140: 
       val = 255 
      else: 
       val = 0 
     newpixel4 = image.Pixel(newred, newgreen, newblue) 
     img.setPixel(col, row, newpixel4) 

img.draw(win) 
win.exitonclick() 

ответ

1

newpixel2 = image.Pixel(newred, newgreen, newblue)

должен быть

newpixel2 = image.Pixel(avg, avg, avg)

и

newpixel4 = image.Pixel(newred, newgreen, newblue)

должен быть

newpixel4 = image.Pixel(val, val, val)

еще вы повторно последний вычислен newred, newgreen и newblue значения, отсюда и "прожилки" цветов.

Смежные вопросы