为了账号安全,请及时绑定邮箱和手机立即绑定

更改图像中像素的值

更改图像中像素的值

噜噜哒 2021-09-28 21:23:55
我正在使用速记。我需要在图像的像素中隐藏数据。但是当我尝试更新像素值时出现问题。我试过下面的代码:from PIL import Imageim = 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 RGB69 62 65Post RGB69 62 65我得到的不是 (0,0,0) 而是旧值。我做错了什么?我需要帮助。谢谢
查看完整描述

4 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

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

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

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


查看完整回答
反对 回复 2021-09-28
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

当你做


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


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


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

#or

pixel[200,200] = [0, 0, 0]


查看完整回答
反对 回复 2021-09-28
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

正如@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')

我们也获得了类似的隐写术任务,如果你有兴趣可以在这里查看完整的代码。


查看完整回答
反对 回复 2021-09-28
  • 4 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号