【问题标题】:why does my grayscaled image have a larger size than the color image为什么我的灰度图比彩色图大
【发布时间】:2017-10-16 22:52:26
【问题描述】:

有问题的图片:http://cdn1.ouchpress.com/media/celebrities/539/kate-upton-401846.jpg

我正在尝试使用以下命令将图像转换为灰度

img = cv2.imread('kate.jpg',cv2.IMREAD_GRAYSCALE)

cv2.imwrite('kategray.jpg',img)

但是灰度图像的大小为 700kB,而彩色图像只有 500kB。

我错过了什么?因为颜色信息被移除了,alpha通道也被移除了。

图片不应该小一点吗?

【问题讨论】:

  • .jpg 上的 Alpha 通道?我错过了什么吗?关于重量增加:颜色信息可能不是唯一被删除的东西,所以可能是源图像中的很多优化(运行长度编码,调色板,......)。不过,这只是我的猜测。
  • 我猜我的频道信息有误。那么只有 png 有 alpha 通道吗?无论哪种方式。仍然困惑为什么去除颜色会增加磁盘上图像的大小
  • png 有,jpeg 没有。我觉得gif也有,但是只有256色,所以我没用过……
  • JPEG 是一种使用(有损)压缩的图像格式。不同的参数会导致不同的图像尺寸。
  • 详细说明,imwritedefault quality setting 是 95。源图像似乎已以大约 85 的质量保存(以获得该大小)。您需要比较使用相同设置生成的图像,以便比较有意义。还要记住,JPEG 内部不使用 RGB。

标签: python image python-3.x opencv image-processing


【解决方案1】:

正如他们的documentation 中所述,如果您不指定params,它们将被设置为默认值。

这就是他们所说的:

对于 JPEG,它可以是从 0 到 100 的质量 (CV_IMWRITE_JPEG_QUALITY)(越高越好)。默认值为 95。

所以,给你。 JPEG 是一种压缩格式,因此文件大小取决于压缩率

我假设您的原始图像的压缩率低于 opencv 中默认的 95

如果您想减小文件大小,请尝试通过以下方式将较低的压缩率指定为第三个参数params

(我假设压缩率为 85%)

cv2.imwrite('kategray.jpg', img, 85)

【讨论】:

    【解决方案2】:

    此问题源于您在图像中的阅读方式。您正在使用 cv2.IMREAD_GRAYSCALE 将图像转换为 16 位灰度。如果您的原始图像只有 8 位深度,则由于所需空间的 1 字节差异,它会变大。为了保持图像的原始位深度,您应该这样读取它:

    cv2.imread('kate.jpg', cv2.IMREAD_GRAYSCALE | cv2.CV_LOAD_IMAGE_ANYDEPTH);

    CV_LOAD_IMAGE_ANYDEPTH 标志将确保您的原始像素深度保持不变。

    【讨论】:

      【解决方案3】:

      试一试,我已经用 python 3.7 测试过了

      import cv2
      img = cv2.imread('d:/1.jpg', cv2.IMREAD_GRAYSCALE | cv2.IMREAD_REDUCED_GRAYSCALE_2)
      cv2.imwrite('d:/test1.jpg', img)
      

      【讨论】:

        猜你喜欢
        • 2013-07-28
        • 2021-10-06
        • 2015-11-20
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 2016-01-11
        • 2015-10-07
        相关资源
        最近更新 更多