【问题标题】:Why does loading a jpeg or jpg image changes it upon saving everytime?为什么每次保存时加载 jpeg 或 jpg 图像都会改变它?
【发布时间】:2020-09-22 15:28:48
【问题描述】:

即使我只是加载图像并保存它,jpeg 和 jpg 的像素值也会发生变化。
这些值在连续运行中不断变化。
当我对 png 图像执行相同操作时,情况并非如此。
我已经使用 opencv 和 imageio 进行了演示。

import cv2
import imageio
import numpy as np

# Using opencv
im = cv2.imread("img.jpeg")
cv2.imwrite("img_save1.jpeg", im)

im2 = cv2.imread("img_save1.jpeg")
cv2.imwrite("img_save2.jpeg", im2)

im3 = cv2.imread("img_save2.jpeg")
print("Opencv ", np.sum(np.abs(im - im2)), np.sum(np.abs(im - im3)), np.sum(np.abs(im2 - im3)), sep=',  ')

# Using imageio
im = imageio.imread("img.jpeg")
imageio.imwrite("img_save1.jpeg", im)

im2 = imageio.imread("img_save1.jpeg")
imageio.imwrite("img_save2.jpeg", im2)

im3 = imageio.imread("img_save2.jpeg")
print("Imageio ", np.sum(np.abs(im - im2)), np.sum(np.abs(im - im3)), np.sum(np.abs(im2 - im3)), sep=',  ')

输出:

Opencv ,  3960369,  4185747,  947042
Imageio ,  10047893,  10064129,  280428

对于 png 文件

# Using opencv
im = cv2.imread("ig.png")
cv2.imwrite("ig_save1.png", im)
im2 = cv2.imread("ig_save1.png")
print("Opencv: ", np.sum(np.abs(im - im2)))

# Using imageio
im = imageio.imread("ig.png")
imageio.imwrite("ig_save1.png", im)
im2 = imageio.imread("ig_save1.png")
print("imageio: ", np.sum(np.abs(im - im2)))

输出:

Opencv:  0
Imageio:  0

【问题讨论】:

    标签: python opencv png jpeg python-imageio


    【解决方案1】:

    JPEG 是一种有损算法。每次在图像数据上运行时,它都会修改像素值。

    PNG 是无损的,它会完美地保留像素值。

    【讨论】:

      猜你喜欢
      • 2020-06-11
      • 2015-12-16
      • 1970-01-01
      • 2015-08-17
      • 2014-04-11
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多