首页 > 解决方案 > Imageio.imwrite 不保存正确的值

问题描述

有人可以解释为什么我在保存图像后会在 rgb 值中出现这种不一致。

import imageio as io

image = 'img.jpg'
type = image.split('.')[-1]
output = 'output' + type

img = io.imread(image)

print(img[0][0][1]) # 204

img[0][0][1] = 255

print(img[0][0][1]) # 255

io.imwrite(output, img, type, quality = 100)

imgTest = io.imread(output)

print(imgTest[0][0][1]) # 223

# io.help('jpg')

使用的图像 = img.jpg

标签: pythonpython-imageio

解决方案


加载 jpeg 图像然后再次将其保存为 jpeg 时更改像素的原因是 jpeg 使用有损压缩。为了节省 jpeg 图像的存储空间,像素值以降维表示形式保存。您可以在此处找到有关特定算法的一些信息。有损压缩的优点是可以显着减小图像大小,而人眼不会注意到任何变化。但是,如果没有任何额外的方法,我们将无法将原始图像保存为 jpg 格式后进行检索。

不使用有损压缩的另一种方法是 png 格式,我们可以通过将示例图像转换为 png 并再次运行代码来验证:

import imageio as io
import numpy as np
import matplotlib.pyplot as plt

image = '/content/drive/My Drive/img.png'
type = image.split('.')[-1]
output = 'output' + type

img = io.imread(image)

print(img[0][0][1]) # 204

img[0][0][1] = 255

print(img[0][0][1]) # 255

io.imwrite(output, img, type)

imgTest = io.imread(output)

print(imgTest[0][0][1]) # 223

# io.help('jpg')

输出:

204
255
255

我们还可以看到,png图片比jpg图片占用的存储空间多很多

import os
os.path.getsize('img.png')
# output: 688444
os.path.getsize('img.jpg')
# output: 69621

这是png图像:png图片


推荐阅读