2012-12-04 80 views
5

我的PNG圖像做圖像處理的大小。我有以下問題。使用imwrite()函數保存圖像後,圖像的大小會增加。例如,以前的圖像是847KB,保存後它變爲1.20 MB。這是一個代碼。我只是讀了一張圖片然後保存,但尺寸增加了。我試圖設置壓縮參數,但它沒有幫助。OpenCV的imwrite增加png圖片

Mat image; 
image = imread("5.png", -1); 

vector<int> compression_params; 
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION); 
compression_params.push_back(9); 
compression_params.push_back(0); 

imwrite("output.png",image,compression_params); 

什麼可能是問題?請任何幫助。 謝謝。

+1

我有同樣的問題,我想這取決於用於壓縮原始圖像的庫和OpenCV使用的png庫。 –

+0

什麼是imread中的-1?你爲什麼不使用imread(「5.png」)? –

+0

設定第二參數爲-1時,imread將讀取PNG透明圖像,否則它不會返回PNG圖像 – Karmar

回答

4

PNG有幾個影響壓縮的選項:壓縮級別(0-9),壓縮策略(HUFFMAN/FILTERED)和內部預測誤差過濾器的選擇(或動態選擇策略)(AVERAGE,PAETH ...)。 似乎只OpenCV的讓你改變了第一個,現在也沒有對the second一個好的默認值。所以,看起來你必須忍受這一點。

更新:看着sources,似乎壓縮策略設置已被添加(在complaints之後),但它不是documented。我想知道這個來源是否被釋放。嘗試使用Z_FILTERED設置選項CV_IMWRITE_PNG_STRATEGY,看看會發生什麼

+0

的alpha通道所以存在用於此問題與OpenCV的無解? – Karmar

+0

@Karmar:看我的更新 – leonbloy

+0

你的意思是設置CV_IMWRITE_PNG_STRATEGY_FILTERED選項?我寫 compression_params.push_back(CV_IMWRITE_PNG_STRATEGY_FILTERED); compression_params.push_back(9);但沒有任何反應。 – Karmar