Изменение значения пикселя в изображении - PullRequest
0 голосов
/ 30 декабря 2018

Я работаю со стенографией.Мне нужно скрыть данные в пикселях изображения. Но я получаю проблему, когда пытаюсь обновить значение пикселя.Я попробовал код ниже:

from PIL import Image

im = Image.open('./data/frame398.png')
pix = im.load()
r, g, b = pix[200,200]
print("Pre RGB")
print(r, g, b)
pix[200,200] = 0,0,0  

Это должно изменить значение пикселя на (0,0,0).Но это не так.Если я попробую код ниже:

imx = Image.open('./data/frame398.png')
pixx = imx.load()
r, g, b = pixx[200,200]
print("Post RGB")
print(r, g, b)

Я получу вывод ниже:

Pre RGB
69 62 65
Post RGB
69 62 65

Вместо (0,0,0) я получаю старое значение.Что я делаю не так?Мне нужна помощь. Спасибо

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Вы успешно меняете изображение, но вам нужно записать его в файл, если вы хотите прочитать его снова:

Чтобы сохранить в тот же файл изображения, просто выполните

im.save('./data/frame398.png', ‘PNG’)
0 голосов
/ 30 декабря 2018

Я запустил приведенный ниже код и получил ожидаемый вывод.

from PIL import Image

im = Image.open('image.jpg')
pix = im.load()

r, g, b = pix[200,200]
print("Pre RGB")
print(r, g, b)

pix[200,200] = 0,0,0

r, g, b = pix[200,200]
print("Post RGB")
print(r, g, b)

Вывод:

Pre RGB
172 196 220
Post RGB
0 0 0
0 голосов
/ 30 декабря 2018

Когда вы делаете

r, g, b = pixx[200,200]

Вы выгружаете значение пикселя из кортежа или массива.Таким образом, ваша лучшая ставка будет

pixel[200,200] = (0, 0, 0)
#or
pixel[200,200] = [0, 0, 0]
...