【问题标题】:The images are different even though they are saved to the same quality即使保存为相同质量的图像也不同
【发布时间】:2015-01-30 12:35:03
【问题描述】:

我使用了OpenCV for Python的函数imwrite将一组图像从PNG转换为JPEG格式,没有指定质量(默认值为95),所以我得到了一个第一组JPEG 图像

然后我使用相同的函数将同一组图像从 PNG 转换为 JPEG 格式,将质量值指定为 75,因此我获得了第二组 JPEG 图像。 p>

最后,我尝试使用相同的函数来转换第一组 JPEG 图像,将质量值指定为 75,因此我获得了第三组 JPEG 图像

当我在第二组和第三组 JPEG 图像之间进行二进制比较时,图像是不同的。为什么?目标质量相同 (75),但源图像不同。

【问题讨论】:

  • 我不认为 JPEG 压缩是确定性的,是吗?
  • 对于任何与计算机视觉相关的东西, - 避免有损 jpgs !
  • 在我看来你是在复合损失:75% of 95% != 75%
  • 为什么? “目标质量相同 (75),但源图像不同”.. 完全正确。这就是为什么。
  • 如果您不了解有损与无损编码,请考虑模拟副本。如果你用一台非常好的复印机复印录像带,然后用一台相当好的复印机复印,那还不如你用一台非常好的复印机复印原件。 (当然,如果你还太小,不记得什么是录像带或模拟,这个类比可能无济于事……但当我在 20 多年前第一次了解有损压缩时,它确实帮助了我。)跨度>

标签: python opencv image-processing jpeg image-compression


【解决方案1】:

当您进行第一次压缩(质量 95)时,您的第一组 JPEG 在未压缩时不会与输入的 PNG 相同。 JPEG 是有损的。 这意味着您的 Quality 75 压缩的输入是不一样的。在第一种情况下,它是您的原始 PNG 图像,在第二种情况下,它是相同文件的 JPEG 失真版本。 由于输入的图片不一样,所以输出的图片也不一样。

【讨论】:

    【解决方案2】:

    您需要了解“质量”在 JPEG 中毫无意义。它只是在编码器之间变化的用户界面简写。您没有保存质量为 75 的 JPEG 图像。您是在告诉 JPEG 编码使用其质量 75(量化表的选择)进行压缩。

    编码 100 => 95 => 70 与编码 100 => 70 不同。

    每次通过 JPEG 编码器运行位图时,都会引入差异。压缩(和解压缩)过程中有几个步骤可以改变图像。

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 2019-12-28
      • 2021-05-11
      相关资源
      最近更新 更多