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

Python 为什么openCV存储的文件比原始文件大(kB)?,python,image,opencv,image-processing,python-imaging-library,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

我有两种不同方式加载和保存图像的代码——第一种是使用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.0kb,PIL的结果为204.6kb


为什么使用openCV保存的图像具有更大的大小?

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

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

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

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


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

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

  • 默认情况下,PIL使用的最大值为9(请参阅)
  • 默认情况下,OpenCV仅使用3(请参见)
使用OpenCV,您可以使用以下代码将压缩设置为9(从此)


你有没有读过关于压缩参数的书?
cv2.imwrite('image.png', img,  [int(cv2.IMWRITE_PNG_COMPRESSION), 9])