【问题标题】:Reading An Image And Saving It, Increases the Image Size读取图像并保存,增加图像大小
【发布时间】:2020-01-25 12:47:05
【问题描述】:

我使用 CV2.imread 加载了一个图像,并使用 cv2.imwrite() 和 scipy.misc.imsave() 保存了它。在这两种情况下,输出图像大小都会增加。这是为什么呢?

输入和输出图像均为 .jpg 文件类型

img = cv2.imread(img_src)
scipy.misc.imsave(img, "scipy_original.jpg")
cv2.imwrite("cv2_original.jpg", img)

输入文件大小为 309kb cv2 中的输出文件大小为 690kb scipy 中的输出文件大小为 399kb

如果你想参考,这是图片:https://i.imgur.com/0J8ClQn.jpg

【问题讨论】:

标签: opencv image-processing scipy imread


【解决方案1】:

OpenCV 对 jpg 有不同的压缩级别,从 0 到 100。默认为 95。

This question 讨论它,this 网站有例子。

使用如下参数保存: cv2.imwrite("cv2_original.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), jpg_quality]) 其中jpg_quality < 95 将减小文件大小。

【讨论】:

  • 但这不会改变输出图像的质量吗?以及压缩如何影响图像大小,我认为使用不同的比特率(如 8 位、16 位)是大小增加的原因。请澄清这一点。
  • 是的,它会改变输出质量。通常更多的压缩 == 更小的尺寸 == 更低的质量。
  • 比特率也影响大小,但压缩算法和压缩级别也有影响。我认为它们比比特率更重要,但我不确定
  • @Beeti:8 位图像在 JPEG 文件中的比特率不是 8。压缩会导致比特率下降,例如您可以获得每像素 0.5 位。压缩质量决定了这一点。质量越低,丢失的数据越多,比特率就越低。在 16 位图像中,您从每像素更多位开始,但您仍然可以降低到非常低的位速率。在您的情况下,输入 JPEG 的质量低于输出 JPEG,因此比特率较低。
  • @CrisLuengo 这是有道理的,所以 openCV 和 scipy 默认情况下会在编码时以更高的比特率保存图像?我们可以通过任何方式知道图像的比特率吗?谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
相关资源
最近更新 更多