2016-05-29 4 views
1

Я открыл изображение в оттенках серого с помощью библиотеки изображений Python, скопировал каждое значение пикселя в другую переменную изображения того же размера и сохранил ее. Теперь, когда я открываю новое изображение с помощью средства просмотра изображений, он выглядит красноватым. Я использовал метод Image.new() с и без «белых» и «черных» аргументов, получив тот же красноватый вывод.Python Imaging Library делает изображение красноватым

Мой код:

from PIL import Image 
import math 

def run(): 
    im = Image.open("hrabowski.jpg") 
    pix = im.load() 
    print im.size 
    # print pix[0, 1] 

    im2 = Image.new("RGB", (2400, 2400)) 

    for i in range(im.size[0]): 
     for j in range(im.size[0]): 
      im2.putpixel((i, j), pix[i, j]) 

    im2.save("hrabowski-2400-2400.jpg") 

Исходное изображение (уменьшено до 500 х 500):

enter image description here

Python выход моего кода (масштабируется до 500 х 500):

enter image description here

Может ли кто-нибудь рассказать мне, что я делаю неправильно?

ответ

2

Ваша проблема заключается в том, что вы хотите создать изображение RGB с тремя каналами. Поэтому одно значение пикселя состоит из трех значений и не только одного (в вашем случае используйте серое значение исходного изображения для каждого из каналов).

Я изменил код соответствующим образом.

Замечание: я почти уверен, что есть лучший способ сделать то, что вы хотите достичь, обычно нет необходимости перебирать отдельные пиксели, но я не уверен, что вы после этого.

from PIL import Image 
import math 

def run(): 
    im = Image.open("ZHiG0.jpg") 
    pix = im.load() 
    print im.size 
    # print pix[0, 1] 

    im2 = Image.new("RGB", (2400, 2400)) 

    for i in range(im.size[0]): 
     for j in range(im.size[0]): 
      im2.putpixel((i, j), (pix[i, j],pix[i, j],pix[i, j])) 

    im2.save("ZHiG0-2400-2400.jpg") 
run() 
Смежные вопросы