有问题的图片: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通道。
图像尺寸不应该更小吗?
答案 0 :(得分:1)
如documentation中所述,如果您未指定params
,则会将其设置为默认值。
这就是他们在那里所说的:
对于JPEG,它可以是从0到100的质量(CV_IMWRITE_JPEG_QUALITY)(越高越好)。默认值为95。
所以,在这里你拥有它。 JPEG是压缩格式,因此文件大小取决于压缩率。
我假设您的原始图片的压缩率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)