为什么我的灰度图像的尺寸大于彩色图像的尺寸

时间:2017-05-17 12:54:27

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

有问题的图片: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通道。

图像尺寸不应该更小吗?

3 个答案:

答案 0 :(得分:1)

documentation中所述,如果您未指定params,则会将其设置为默认值。

这就是他们在那里所说的:

  

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

所以,在这里你拥有它。 JPEG压缩格式,因此文件大小取决于压缩率

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

如果要降低文件大小,请尝试以下列方式指定较低的压缩率作为第三个参数params

(我假设压缩率为85%)

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

答案 1 :(得分:1)

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

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

CV_LOAD_IMAGE_ANYDEPTH标记将确保维持原始像素深度。

答案 2 :(得分:0)

尝试一下,我已经使用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)