2012-12-04 18 views
5

Sto facendo la manipolazione delle immagini sulle immagini png. Ho il seguente problema. Dopo aver salvato un'immagine con la funzione imwrite(), la dimensione dell'immagine aumenta. Ad esempio, l'immagine precedente è 847KB, dopo averla salvata diventa 1,20 MB. Ecco un codice. Ho appena letto un'immagine e poi la salvo, ma la dimensione è aumentata. Ho provato a impostare i parametri di compressione ma non aiuta.OpenCV imwrite aumenta la dimensione dell'immagine 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); 

Quale potrebbe essere un problema? Qualsiasi aiuto per favore. Grazie.

+1

Ho lo stesso problema e penso dipenda dalle librerie usate per comprimere l'immagine originale e la libreria png usata da OpenCV. –

+0

che cosa è -1 in imread? Perché non usi semplicemente imread ("5.png")? –

+0

quando si imposta il secondo parametro su -1, imread leggerà l'immagine trasparente png, altrimenti non restituirà il canale alfa dell'immagine png – Karmar

risposta

4

PNG ha diverse opzioni che influenzano la compressione: livello di compressione di svuotamento (0-9), strategia di sgonfiaggio (HUFFMAN/FILTERED) e scelta (o strategia per la scelta dinamica) per il filtro di errore di previsione interno (MEDIA, PAETH ...). Sembra che OpenCV ti permetta solo di cambiare il primo, e non ha un buon valore predefinito per the second. Quindi, sembra che tu debba vivere con quello.

Aggiornamento: esaminando lo sources, sembra che sia stata aggiunta l'impostazione della strategia di compressione (dopo complaints), ma non è documented. Mi chiedo se quella fonte sia stata rilasciata. Prova a impostare l'opzione CV_IMWRITE_PNG_STRATEGY con Z_FILTERED e vedi cosa succede

+0

Quindi non esiste una soluzione per questo problema con OpenCV? – Karmar

+0

@Karmar: vedi il mio aggiornamento – leonbloy

+0

Vuoi dire impostazione opzione CV_IMWRITE_PNG_STRATEGY_FILTERED? Scrivo compression_params.push_back (CV_IMWRITE_PNG_STRATEGY_FILTERED); compression_params.push_back (9); ma non succede nulla. – Karmar

Problemi correlati