2011-08-29 15 views
6

Mi chiedevo se esiste un modo per specificare facilmente il fattore di compressione durante la compressione delle immagini su opencv senza dover dichiarare un vettore fittizio. Se dichiaro un vettore p (simile a this discussion), ma contenenti solo 2 elementi, che è ciò imwrite prende, posso effettuare la chiamata:Compressione delle immagini su opencv (scrittura). Come impostare in modo esplicito il fattore di compressione?

vector<int> p; 
p[0] = CV_IMWRITE_JPEG_QUALITY; 
p[1] = 50; // compression factor 

imwrite("compressed.jpg", img, p); 

Detti lavori bene. Tuttavia, voglio comprimere la stessa immagine con diversi fattori di compressione in un ciclo. C'è un modo per passare in modo esplicito il parametro a imwrite? Qualcosa di simile:

imwrite("compressed.jpg", img, {CV_IMWRITE_JPEG_QUALITY, factor}); // this doesn't work 

Come nota a margine, l'intestazione funzione è:

bool imwrite(const string& filename, const Mat& img, const vector<int>& params=vector<int>()); 

Grazie!

Aggiornamento: Dopo aver attivato C++ 0x, posso passare un vettore esplicitamente definito in linea alla funzione.

+1

Hai C++ 11? –

+0

Questo è in esecuzione su una VM con gcc versione 4.5.2 –

+2

Se si abilita il supporto C++ 0x, si può dire 'std :: vector ({1,2})' in linea. –

risposta

1

Come suggerito, l'attivazione di C++ 0x mi consente di passare un vettore esplicitamente definito in linea alla funzione. Questo ha risolto il problema.