繁体   English   中英

更改图像中的像素值

[英]Changing the value of pixel in an image

我正在使用速记术。 我需要在图像的像素中隐藏数据。但是当我尝试更新像素的值时,我遇到了问题。 我尝试了下面的代码:

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)我正在使用旧值。 我做错了什么? 我需要帮助。谢谢

您已经成功更改了图像,但是如果要再次读取它,则需要将其写入文件:

要保存到同一图像文件,只需执行

im.save('./data/frame398.png', ‘PNG’)

当你做

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

您正在从元组或数组中卸载像素值。 所以你最好的选择是

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

我运行了以下代码,并获得了预期的输出。

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

@chthonicdaemon的回答中所述 ,您实际上需要使用Image.save()保存该法师。

其次,如果您想使用像素值,最好将加载的图像转换为numpy数组,例如

import numpy as np
im = Image.open('./data/frame398.png')
im = np.array(im)

这样可以简化像素的操作,只需小心创建原始图像的副本即可,

im = np.array(im)
im = im.copy()

如果某时未制作副本,则python不允许分配直接值。

之后,您可以轻松更改单个值,例如,

im[0, 0, 0] = 255 # Complete RED
im[0, 0, 1] = 0 # No green
im[0, 0, 2] = 0 # No blue

至于保存图像,它也非常容易,

Image.fromarray(im).save('name_of_file.png', 'PNG')


我们还为您提供了类似的笔法,如果您对此感兴趣,可以在此处查看完整的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM