2012-12-04 13 views
5

Png görüntülerinde görüntü işleme yapıyorum. Aşağıdaki problemim var. Imwrite() işleviyle bir görüntü kaydettikten sonra, resmin boyutu artırılır. Örneğin daha önce görüntü 847KB'dir, kaydedildikten sonra 1,20 MB olur. İşte bir kod. Sadece bir görüntü okudum ve sonra kaydediyorum, ancak boyut artar. Sıkıştırma paramizlerini ayarlamaya çalıştım ama işe yaramıyor.OpenCV imwrite, png görüntüsünün boyutunu artırır

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); 

Sorun ne olabilir? Herhangi bir yardım lütfen. Teşekkürler.

+1

Aynı sorunu yaşıyorum ve sanırım bu, orijinal görüntüyü ve OpenCV tarafından kullanılan png kitaplığını sıkıştırmak için kullanılan kitaplıklara bağlı. –

+0

1 ölümden ne kadardır? Neden sadece imread ("5.png") kullanıyorsun? –

+0

, ikinci parametreyi -1 olarak ayarlarken, png saydam resmi okuyacak, aksi halde png görüntünün alfa kanalı döndürmeyeceği – Karmar

cevap

4

PNG, sıkıştırmayı etkileyen birkaç seçeneğe sahiptir: sıkıştırma düzeyini (0-9), stratejiyi (HUFFMAN/FILTERED) ve hedef tahmin hatası filtresi için (veya dinamik olarak seçim yapmak için stratejiyi) tanımlayın (AVERAGE, PAETH) ...). Görünüşe göre OpenCV sadece ilkini değiştirmenize izin veriyor ve the second için iyi bir varsayılan değer değil. Yani, bununla yaşamaman gerekiyor gibi görünüyor.

Güncelleme: sources'a baktığımızda, sıkıştırma stratejisi ayarının eklendiğini görüyoruz (complaints'dan sonra), ancak documented değil. Bu kaynağın serbest bırakıldığını merak ediyorum. CV_IMWRITE_PNG_STRATEGY seçeneğini Z_FILTERED ile ayarlamaya ve ne olduğunu görmeye çalışın

+0

Bu soruna OpenCV ile çözüm yok mu? – Karmar

+0

@Karmar: Güncelleme sayfamıza bakın – leonbloy

+0

CV_IMWRITE_PNG_STRATEGY_FILTERED seçeneğini mi kastediyorsunuz? compression_params.push_back (CV_IMWRITE_PNG_STRATEGY_FILTERED) yazarım; compression_params.push_back (9); ama hiçbir şey olmadı. – Karmar