【问题标题】:Why does openCV store a file larger(kB) than the original?为什么 openCV 存储的文件比原始文件大(kB)?
【发布时间】:2018-04-29 20:56:17
【问题描述】:

我的代码以两种不同的方式加载和保存图像 - 第一种使用 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保存的图片尺寸比较大?

【问题讨论】:

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


【解决方案1】:

大小差异与 ZLIB 压缩设置有关。

  • 默认情况下,PIL 使用最多 9 个(请参阅here
  • 默认情况下,OpenCV 只使用 3(见here

使用 OpenCV,您可以使用此代码将压缩设置为 9(来自此 answer

cv2.imwrite('image.png', img,  [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

【讨论】:

    【解决方案2】:

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

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

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

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

    您可以尝试为图像写入函数设置相同的参数,但即便如此,您也不太可能获得完全相同的文件大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      相关资源
      最近更新 更多