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

2024-04-27 03:02:08 发布

您现在位置:Python中文网/ 问答频道 /正文

为了对图像进行过滤,软件会改变图像中像素的值

当我尝试这个代码时

file = open("hey.jpg" , "rb") #opening file

x = file.read() #reading from file

for i in range(len(x)): 
    print(x[i]) #cordinate of each pixel

file.close() #closing file

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

“我的图像”的输出示例:

240 -> R
255 -> G
0   -> B

我想更改每个图像的值,并将其保存在新图像中

我尝试了下面的代码,但不起作用

file = open("hey.jpg" , "rb") #opening file

x = file.read() #reading from file

file.close() #closing file

file = 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

无需阅读此内容:

附言: Windows10,python3.8。 我试图把一切都简化

我的意思是没有错误,但操作系统无法解码并输出图像 我不想使用任何像PIL这样的第三方库

这段代码复制了一幅图像的二进制数据,并成功地创建了一幅新的图像

file = open("hey.jpg" , "rb") #opening file

x = file.read() #reading from file

file.close() #closing file

file = open("new.jpg" , "wb")
 
file.write(x)

file.close()

Tags: 代码from图像newclosereadopenfile
2条回答

JPEGPNG和大多数图像文件格式都不是这样工作的。它们以元数据开头,如照片拍摄日期、相机型号、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图像的高度和宽度,因为文件开头没有显示其高度和宽度的标题

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

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

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

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

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

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

相关问题 更多 >