gpt4 book ai didi

python - 如何将负 (<0) RGB 颜色值放入 PIL 中的图像?

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:23 24 4
gpt4 key购买 nike

我正在尝试为学校做一种增量编码任务,我需要将连续像素之间的差异放入下一个像素中,以便稍后对它们进行解码。不幸的是,如果差异为负,PIL 函数 putdata 将以某种方式将值转换为 0,这使得我以后无法使用反向过滤器对其进行解码。我该怎么做才能让它成为可能?请注意,编码后的图像不必看起来很漂亮,它只需要包含我对其进行解码所需的数据即可。

from PIL import Image

img = Image.open("lena.bmp")
img = img.convert("RGB")
encoded_img = Image.new("RGB", (img.size[0], img.size[1]))
decoded_img = Image.new("RGB", (img.size[0], img.size[1]))
colorlist = []
pixels = []

# Encoding
img.show()

for pixel in img.getdata():

R0 = pixel[0]
G0 = pixel[1]
B0 = pixel[2]
colorlist.append(R0)
colorlist.append(G0)
colorlist.append(B0)

if len(colorlist) > 3:
R0 -= colorlist[len(colorlist) - 6]
G0 -= colorlist[len(colorlist) - 5]
B0 -= colorlist[len(colorlist) - 4]

pixels.append((R0, G0, B0))

encoded_img.putdata(pixels)
encoded_img.show()
encoded_img.save("encoded.bmp")

最佳答案

对每个 RGB 值使用模 256。这意味着所有值都在 [0-255] 范围内结束,即一个字节,例如-1 映射到 255。

然后,对于两个 RR0R1,它们的区别是:

Rdiff = (R0 - R1) % 256

稍后,您可以执行相反的操作:

R0 = (R1 + Rdiff) % 256

只要所有输入也在 0-255 范围内(在本例中为 0-255),计算就是正确的。

这些是一些示例编码 (Rdiff) 值,具有以下逻辑:

R0=50, R1=20  --> Rdiff=30
R0=10, R1=50 --> Rdiff=216
R0=0, R1=5 --> Rdiff=251
R0=33, R1=200 --> Rdiff=89

关于python - 如何将负 (<0) RGB 颜色值放入 PIL 中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54449562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com