更改图像中像素的值

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


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


噜噜哒
浏览 206回答 4
4回答

缥缈止盈

您已成功更改图像,但如果您想再次读取它,则需要将其写入文件:要保存到相同的图像文件,只需执行im.save('./data/frame398.png', ‘PNG’)

凤凰求蛊

当你做r, g, b = pixx[200,200]您正在从元组或数组中卸载像素值。所以你最好的选择是pixel[200,200] = (0, 0, 0)#orpixel[200,200] = [0, 0, 0]

牧羊人nacy

正如@chthonicdaemon在回答中提到的,您实际上需要使用 Image.save() 保存法师。其次,如果您想使用像素值,最好将加载的图像转换为 numpy 数组,例如,import numpy as npim = Image.open('./data/frame398.png')im = np.array(im)这使得像素操作更简单,只需注意创建原始图像的副本,例如,im = np.array(im)im = im.copy()如果有时未制作副本,python 不允许分配直接值。之后,您可以轻松更改单个值,例如,im[0, 0, 0] = 255 # Complete REDim[0, 0, 1] = 0 # No greenim[0, 0, 2] = 0 # No blue至于保存图像,它也非常简单,例如,Image.fromarray(im).save('name_of_file.png', 'PNG')我们也获得了类似的隐写术任务,如果你有兴趣可以在这里查看完整的代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python