2017-05-17 55 views
2

圖像尺寸較大: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

.jpg上的Alpha通道?我錯過了什麼嗎?關於增加重量:顏色信息可能不是唯一被刪除的東西,因此可能會在源圖像(run-lenght encoding,調色板...)中進行大量優化。但只有我的猜測。 –

+0

我想我的頻道信息是錯誤的。所以只有PNG有alpha通道?無論哪種方式。仍然困惑爲什麼去除顏色增加磁盤上的圖像大小 – lucidxistence

+0

PNG有,jpeg沒有。我認爲GIF也有一個,但它只有256色,所以我從來沒有使用它... –

回答

1

正如documentation所述,如果您未指定params,它們將被設置爲默認值。

這就是他們所說的有:

對於JPEG圖像,也可以是從0到100(越高越好)質量(CV_IMWRITE_JPEG_QUALITY)。默認值是95.

所以,在這裏,你有它。 JPEG是一個壓縮格式,所以文件大小取決於壓縮率

我假設你的原始圖像的壓縮率低於默認的95在opencv中的

如果你想降低您的文件大小,嘗試指定一個較低的壓縮率作爲第三個參數params方式如下:

(我假設的85%的壓縮率)

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

這個問題源於你如何閱讀圖像。您正在使用cv2.IMREAD_GRAYSCALE,它將圖像轉換爲16位灰度。如果您的原始圖像僅具有8位深度,則由於所需空間的1個字節差異,其尺寸將會增大。爲了保持圖像的原始位深度,你應該看它像這樣:

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

CV_LOAD_IMAGE_ANYDEPTH標誌將確保原始像素深度得以維持。

相關問題