为什么每次加载jpeg或jpg图像保存时都会改变?

问题描述 投票:0回答:1

即使我只是简单地加载图像并保存,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个回答
2
投票

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

PNG是无损的,它将完美地保存像素值。

© www.soinside.com 2019 - 2024. All rights reserved.