2014-04-03 21 views
9

मैं ओपनसीवी (2.4.8) में एक प्रोग्राम बना रहा हूं जो वीडियो फ़ाइलों को पढ़ना चाहिए और उन पर कुछ गणना करना चाहिए। इन गणनाओं के लिए मुझे उच्च-रेज फ्रेम की आवश्यकता नहीं है, मैं संकल्प के रूप में 640 * 360 के साथ बिल्कुल ठीक हूं।ओपनसीवी वीडियो फ़ाइल रिज़ॉल्यूशन बदलें

जल्दी परीक्षणों में मैं अपने वेब कैमरा संलग्न किया था और मैं प्रयोग किया है:

VideoCapture cap(0); 
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640); 
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360); 
Mat image; 
cap.read(image); 
namedWindow("firstframe", 1); 
imshow("firstframe", image); 
waitKey(0); 

जो पूरी तरह से छवि को फिर से। अब मैं अगले चरण में जा रहा हूं जहां मैं लाइव फीड के बजाय संग्रहीत वीडियो के लिए अपने प्रोग्राम का उपयोग करना चाहता हूं (जिसे मैंने परीक्षण के लिए उपयोग किया था)। जब मैं स्रोत फ़ाइल पथ (स्ट्रिंग) के साथ '0' को बदलता हूं, तो फ़ाइल लोड होती है, लेकिन संकल्प 1920 * 1080 रहता है।

क्या मैंने कुछ गलत किया? क्या फ्लाई पर 'कम रिज़ॉल्यूशन पर वीडियो लोड करने का कोई तरीका है?

मैंने ओपनसीवी दस्तावेज पढ़ा है। कुछ सेटिंग्स को 'केवल कैमरे' लेबल किया गया है लेकिन यह सेटिंग नहीं है: http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-videocapture

मैं मैक पर ओपनसीवी का उपयोग कर रहा हूं, और इसे मैकपॉर्ट्स के साथ स्थापित किया गया है।

मुझे बताएं कि क्या कोई और विवरण आवश्यक है। आपकी मदद के लिए आगे

धन्यवाद

संपादित करें: मुझे एहसास हुआ है कि cap.set (...) कार्यों एक बूलियन लौटने के लिए, तो मैं उन्हें बाहर मुद्रण की कोशिश की है और वे दोनों 0 वापसी यह निश्चित रूप से पुष्टि करता है कि फ्रेम का आकार बदल नहीं है। क्यों के रूप में अभी भी कोई सुराग नहीं ...

संपादित 2: तो अब, एक अस्थायी समाधान के लिए मैं पढ़ने (छवि) के बाद निम्न पंक्ति का उपयोग करें:

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC); 

और यह काम करता है। लेकिन मुझे लगता है कि यह वास्तव में सबसे इष्टतम समाधान नहीं है।

+0

जब आपके पास वेबकैम है, तो आप अधिग्रहित छवियों का संकल्प सेट कर सकते हैं, लेकिन जब आप अपने वीडियो को लोड करते हैं तो वहां संकल्प एन्कोड किया जाता है। जैसा कि मैंने देखा है, छवि का आकार बदलने का एकमात्र तरीका है। –

+0

धन्यवाद, मैं इसके बारे में सोच रहा था। संकल्प में परिवर्तन शायद वेबकैम पर सीधे हार्डवेयर में किया जाता है। मेरा अनुमान था कि इस विकल्प के साथ ffmpeg फ्लाई पर आकार बदल जाएगा। लेकिन फिर, यह मेरे आकार का बयान के रूप में वही गणना होना चाहिए। – user3319803

उत्तर

8
का उपयोग कर

resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC); 

पढ़ने (छवि) के बाद इस समस्या को हल करने के लिए सबसे अच्छा समाधान हो रहा है

। तो कुल (परीक्षण) कोड हो जाता है:

VideoCapture cap("path/to/file"); 
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640); 
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360); 
Mat image; 
cap.read(image); 
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC); 
namedWindow("firstframe", 1); 
imshow("firstframe", image); 
waitKey(0); 

किसी को भी एक बेहतर तरीका के जानता है, तो कृपया मुझे बताएं।

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