2011-08-29 7 views
6

मैं सोच रहा था कि डमी वेक्टर घोषित किए बिना ओपनसीवी पर छवियों को संपीड़ित करते समय संपीड़न कारक को आसानी से निर्दिष्ट करने का कोई तरीका है या नहीं।opencv (imwrite) पर छवियों को संपीड़ित करना। संपीड़न कारक को स्पष्ट रूप से कैसे सेट करें?

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

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

ऊपर काम करता है ठीक: यदि मैं एक वेक्टर पी (this discussion के समान) है, लेकिन केवल 2 आइटम, जो है imwrite क्या लेता युक्त घोषित, मैं कॉल कर सकते हैं। हालांकि, मैं एक ही छवि को एक लूप में कई संपीड़न कारकों के साथ संपीड़ित करना चाहता हूं। क्या इमराइट करने के लिए पैरामीटर को स्पष्ट रूप से पास करने का कोई तरीका है? कुछ की तरह:

imwrite("compressed.jpg", img, {CV_IMWRITE_JPEG_QUALITY, factor}); // this doesn't work 
बस एक पक्ष नोट के रूप में

, समारोह शीर्षक है:

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

धन्यवाद!

अद्यतन: सी ++ 0x सक्रिय करने के बाद, मैं एक वेक्टर को स्पष्ट रूप से फ़ंक्शन में परिभाषित इनलाइन पास कर सकता हूं।

+1

क्या आपके पास सी ++ 11 है? –

+0

यह जीसीसी संस्करण 4.5.2 –

+2

के साथ एक वीएम पर चल रहा है यदि आप सी ++ 0x समर्थन सक्षम करते हैं, तो आप 'std :: vector ({1,2})' इनलाइन कह सकते हैं। –

उत्तर

1

जैसा कि सुझाव दिया गया है, सी ++ 0x सक्रिय करने से मुझे फ़ंक्शन में स्पष्ट रूप से परिभाषित इनलाइन पास करने की अनुमति मिलती है। इस मुद्दे को हल किया।

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