为什么openCV存储的文件比原始文件大(kB)?

时间:2017-11-16 10:47:48

标签: python image opencv image-processing python-imaging-library

我有以两种不同方式加载和保存图像的代码 - 首先使用openCV,第二种使用PIL。

import cv2
from PIL import Image

img = cv2.imread("/home/myname/png/image.png")
cv2.imwrite("/home/myname/png/image_save.png", img)

img = Image.open("/home/myname/png/image.png")
img.save("/home/myname/png/image_save_pil.png")

原始图像大小为204.6 kB。 openCV得到的结果为245.0 kB,PIL的结果为204.6 kB。

为什么使用openCV保存的图像尺寸较大?

2 个答案:

答案 0 :(得分:2)

尺寸差异与ZLIB压缩设置有关。

  • 默认情况下,PIL使用最大值9(请参阅here
  • 默认情况下,OpenCV仅使用3(请参阅here

使用OpenCV,您可以使用此代码(来自此answer

将压缩设置为9
cv2.imwrite('image.png', img,  [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

答案 1 :(得分:0)

如果两个PNG由不同的库生成,则不能指望它们具有相同的大小。

文件规范定义了文件的结构,因此每个人都知道在哪里写信息以及在哪里找到它。如何编码以及如何解码数据...

很多东西都是可选的,比如元数据,压缩率,......

就像在两个不同的家庭中养同卵双胞胎一样。

您可以尝试为图像写入功能设置相同的参数,但即使这样,您也不可能获得完全相同的文件大小。