2012-08-31 13 views
5

मैं फ़ाइलों पर कुछ सरल आपरेशनों की कोशिश करना चाहता था और मैं खोलने और बचत फ़ाइलें (मैं अजगर का उपयोग)ओपनसीवी - imread(), imwrite() पीएनजी के आकार को बढ़ाता है?

image = cv2.imread("image.png") 
cv2.imwrite("image_processed.png", image) 

के साथ शुरू इस आपरेशन अपने मूल image 33kb से ही देख 144kb छवि में परिवर्तित हो जाने के बाद।

मैं कुछ इस तरह कर रही है की कोशिश की है: http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imwrite#imwrite

params = list() 
    params.append(cv.CV_IMWRITE_PNG_COMPRESSION) 
    params.append(8) 

    image = cv2.imread("image.png") 
    cv2.imwrite("image_processed.png",image,params) 

लेकिन यह ज्यादा नहीं बदलता है

(आकार 132kb तक की कमी) इस छवि को जो मैं के साथ काम कर रहा हूँ है:

enter image description here

+0

मुझे पीएनजी संपीड़न के साथ एक ही समस्या थी। 'Scikit-image' पर स्विच करना और इसके' imsave' का उपयोग करके चमत्कार किया। – letmaik

उत्तर

5

कुछ पीएनजी लेखकों जैसे कि जीआईएमपी मानक libpng की तुलना में बहुत बेहतर संपीड़ित पीएनजी लिखते हैं, जिसका उपयोग किया जाता है opencv द्वारा। आप Imagemagick के साथ छवि को फिर से खोल और सहेज सकते हैं, और देखें कि कौन सा अंतर बनाता है (ओपनसीवी की तुलना में)।

यहां तक ​​कि एक विशेष सॉफ्टवेयर भी है जो PNGcrush की तरह पीएनजी को बेहतर ढंग से संपीड़ित करने का प्रयास करता है।

क्या आप छवि को प्रश्न में प्रदान कर सकते हैं? मैं फ़ाइल आकार अनुकूलन के संबंध में इसके साथ खेलना चाहता हूं।

+0

मैंने उस छवि को जोड़ा है जिसके साथ मैं काम कर रहा हूं। अपने उत्तर को ध्यान में रखते हुए - मुझे एहसास है कि ऐसे कार्यक्रम हैं जो मुझे पीएनजी के आकार को कम करने की अनुमति देंगे लेकिन मैं ओपनसीवी की कार्यक्षमता का उपयोग करना चाहता हूं। – Patryk

+1

आपने मूल पीएनजी की बजाय एक जेपीईजी फ़ाइल प्रदान की है, इसलिए मैं वास्तव में संपीड़न को नहीं देख सकता। लेकिन इसके अलावा: आपको ओपनसीवी के माध्यम से बेहतर संपीड़न नहीं मिलेगा। एक आखिरी बात यह हो सकती है कि आप 8 बिट की बजाय 16 बिट छवियों को स्टोर करते हैं। ऐसा होता है यदि आप एक CV_16U मैट्रिक्स का उपयोग करते हैं। – ypnos

2

जैसा कि ypnos द्वारा संकेत दिया गया है, आपकी स्रोत फ़ाइल jpg है (भले ही इसमें पीएनजी एक्सटेंशन हो)। यही कारण है कि, जब आप इसे पीएनजी प्रारूप में सहेजते हैं, तो यह अधिक स्थान का उपयोग करेगा, क्योंकि आप प्रारूप बदल रहे हैं (jpg से jpg)।

साथ अंतिम पंक्ति के बजाय ऐसे:

cv2.imwrite("image_processed.jpg",image,params) 

और तुम है कि आकार इतना नहीं बदलता है देखेंगे।

वैकल्पिक रूप से, कोड एक अलग छवि, रखने के रूप में यह है, लेकिन का उपयोग इस तरह के रूप http://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png

0

अर्द्ध संबंधित है, लेकिन मैं matplotlib.image.imsave के साथ एक ही मुद्दा था - यह 16 के रूप में एक 8 बिट ग्रेस्केल छवि की बचत होगी यह सुनिश्चित करने के लिए कि यह 8-बिट सरणी है, scipy.misc.bytescale का उपयोग करने के बाद भी, आकार को किसने आकार दिया। हालांकि, scipy.misc.imsave इसे 8-बिट छवि के रूप में सही ढंग से सहेजा गया।

संबंधित मुद्दे