Imageio.imwrite 没有保存正确的值
Imageio.imwrite does not save the correct values
谁能解释一下为什么保存图像后 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
imageio中有定义的进程
imageio读取的是一个RGB结构,如果你想把它保存到opencv中,你需要把这个RGB转换成BGR。此外,如果您在 matplotlib 中绘图,它会相应变化。
最好的方法是,
- 读取imageio中的图片
- 将 RGB 转换为 BGR
- 保存在opencv中写入
加载 jpeg 图像然后再次将其保存为 jpeg 时像素发生变化的原因是 jpeg 使用有损压缩。为了节省 jpeg 图像的存储空间 space,像素值以降维表示形式保存。您可以找到有关特定算法的一些信息here。
有损压缩的优点是可以显着减小图像尺寸,而人眼不会注意到任何变化。但是,如果没有任何额外的方法,我们将不会在将原始图像保存为 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 图片占用更多的存储空间 space
import os
os.path.getsize('img.png')
# output: 688444
os.path.getsize('img.jpg')
# output: 69621
这是 png 图片:
谁能解释一下为什么保存图像后 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
imageio中有定义的进程
imageio读取的是一个RGB结构,如果你想把它保存到opencv中,你需要把这个RGB转换成BGR。此外,如果您在 matplotlib 中绘图,它会相应变化。
最好的方法是,
- 读取imageio中的图片
- 将 RGB 转换为 BGR
- 保存在opencv中写入
加载 jpeg 图像然后再次将其保存为 jpeg 时像素发生变化的原因是 jpeg 使用有损压缩。为了节省 jpeg 图像的存储空间 space,像素值以降维表示形式保存。您可以找到有关特定算法的一些信息here。 有损压缩的优点是可以显着减小图像尺寸,而人眼不会注意到任何变化。但是,如果没有任何额外的方法,我们将不会在将原始图像保存为 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 图片占用更多的存储空间 space
import os
os.path.getsize('img.png')
# output: 688444
os.path.getsize('img.jpg')
# output: 69621
这是 png 图片: