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

如何在python中更改图像中每个像素的值?

如何在python中更改图像中每个像素的值?

FFIVE 2024-01-24 20:36:23
为了制作图像过滤器,软件会更改图像中的像素值。当我尝试这段代码时file = open("hey.jpg" , "rb") #opening filex = file.read() #reading from filefor i in range(len(x)):     print(x[i]) #cordinate of each pixelfile.close() #closing file我知道它正在通过输出输出每个像素的信息,因为没有值高于 255 或低于 0 。我的图像的输出示例:240 -> R255 -> G0   -> B我想更改每个值并将其保存在新图像中我尝试了以下代码,但它不起作用file = open("hey.jpg" , "rb") #opening filex = file.read() #reading from filefile.close() #closing filefile = open("new.jpg" , "wb") #the new image for i in range(len(x)): #writing the new data with filter    if x[i] !=255: #pixels RGB cant be 256        file.write(bytes(x[i] + 1)) #bytes because when doig write(x[i]+1) it gives mes an error that a bytee object is required not int    else: #if it is 255 then do nothing        file.write(bytes(x[i]))file.close()#closing the new image无需阅读此内容:PS:Windows 10,Python3.8。我试图让一切变得简单。不起作用我的意思是没有错误,但操作系统无法解码它并输出图像我不想使用任何第三方库,如 PIL 。此代码复制图像的二进制数据并成功创建一个新图像。file = open("hey.jpg" , "rb") #opening filex = file.read() #reading from filefile.close() #closing filefile = open("new.jpg" , "wb") file.write(x)file.close()
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

JPEG、PNG和大多数图像文件格式不能这样工作。它们的开头包含元数据,例如拍照日期、相机型号、GPS 坐标、图像高度、宽度和版权信息。之后,它们通常以高度优化的压缩格式存储像素,因此在不先解压缩数据的情况下无法更改像素。然后,您可以编辑它们并将它们写回,使用新的标头并重新压缩。因此,我们强烈建议您使用图书馆。

如果您真的不想使用 Python 库,您可以在终端中使用ImageMagick(命令行工具)将图像转换为纯 RGB 像素。因此,如果您的图像被称为input.jpg,您可以在终端中运行它:

magick input.jpg -depth 8 RGB:pixels.dat

然后,如果您的图像为 640x480 像素,则调用的文件的pixels.dat长度将恰好为 640x480x3 字节,没有标头、元数据或压缩。然后您可以完全按照您最初的设想进行处理。之后,您可以使用以下命令将其恢复为 JPEG 或 PNG:

magick -depth 8 -size 640x480 RGB:pixels.dat output.jpg

请注意,在从 RGB 字节到 JPEG 的返回过程中,您必须如何告诉ImageMagick图像的高度和宽度,因为文件开头没有标头说明其高度和宽度。


查看完整回答
反对 回复 2024-01-24
?
不负相思意

TA贡献1777条经验 获得超10个赞

我知道它正在通过输出输出每个像素的信息,因为没有值高于 255 或低于 0

此行为的原因与“每个像素的信息”不同 - 您只是访问了文件的各个字节,并且 1 字节值始终是从0x00(包括)到0xFF(包括)。如果您对其他类型的文件(例如文本文件)执行此操作,结果将类似。

此代码复制图像的二进制数据并成功创建一个新图像。

您的代码只是将文件内容复制到另一个文件中。请注意,无论文件类型如何,它都会起作用。

我不想使用任何第三方库,例如 PIL

按照您的意愿进行操作,但请记住,如果没有“任何第三方库”,您必须从头开始自己实现每种图像格式的处理。


查看完整回答
反对 回复 2024-01-24
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信