2012-07-17 18 views
12

मैं लिनक्स (यूबंटू 12.04) पर पायथन के माध्यम से ओपनसीवी का उपयोग कर रहा हूं, और मेरे पास एक लॉजिटेक सी 9 20 है जिसमें से मैं छवियों को पकड़ना चाहता हूं। पनीर वास्तव में उच्च संकल्पों तक फ्रेम पकड़ने में सक्षम है, लेकिन जब भी मैं ओपनसीवी का उपयोग करने की कोशिश करता हूं, मुझे केवल 640x480 छवियां मिलती हैं। मैंने कोशिश की है:ओपनसीवी (पायथन के माध्यम से): फ्रेम चौड़ाई/ऊंचाई सेट करें?

import cv 
cam = cv.CaptureFromCAM(-1) 
cv.SetCaptureProperty(cam,cv.CV_CAP_PROP_FRAME_WIDTH,1920) 
cv.SetCaptureProperty(cam,cv.CV_CAP_PROP_FRAME_WIDTH,1080) 

लेकिन इस "0" के उत्पादन में पैदावार पिछले दो पंक्तियों में से प्रत्येक के बाद, और जब मैं बाद में के माध्यम से एक फ्रेम हड़पने:

image = cv.QueryFrame(cam) 

जिसके परिणामस्वरूप छवि अभी भी 640x480 है।

मैं क्या (अजगर के बाहर) के माध्यम से संबंधित होने के लिए उपकरण लग रहा था स्थापित करने की कोशिश की है:

sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp 

और मैं वास्तव में जाहिरा तौर पर कैमरे की सेटिंग्स में हेरफेर कर सकते हैं (फिर से, अजगर की बाहर) के माध्यम से:

v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1 
v4l2-ctl --set-parm=30 

और देख सकते हैं कि:

v4l2-ctl -V 

वास्तव में पता चलता है कि कुछ न कुछ है बदल दिया गया:

Format Video Capture: 
    Width/Height : 1920/1080 
    Pixel Format : 'H264' 
    Field   : None 
    Bytes per Line : 3840 
    Size Image  : 4147200 
    Colorspace  : sRGB 

लेकिन जब मैं अजगर खोल में पॉप, ऊपर कोड से पहले के रूप में बिल्कुल वैसा ही व्यवहार करती है (मुद्रण शून्य जब गुण सेट करने की कोशिश कर और एक छवि है कि 640x480 है प्राप्त)।

पकड़े जाने के संकल्प तक सामने लाना करने में सक्षम होने के नाते मेरे लिए बहुत महत्वपूर्ण मिशन है, इसलिए मैं बहुत इसकी सराहना करेंगे किसी भी संकेत दिए गए किसी प्रदान कर सकते हैं।

+0

मैं CV2 के साथ एक ही समस्या आ रही है (OpenCV 2.4.2) के लिए है। पहले, यह ठीक काम करता था। – Froyo

+0

@ फ्रायओ: ओपनसीवी और उबंटू के किस संस्करण पर आपने यह काम किया है? मैं इस काम को प्राप्त करने के लिए बस अपने सिस्टम को वापस कर सकता हूं ... –

+0

ओपनसीवी 2.3.1 और उबंटू 11.10 – Froyo

उत्तर

1

सुनिश्चित नहीं हैं कि अगर यह काम करता है, लेकिन आप अपने मूल्यों के मापदंडों के लिए मजबूर करने आप कैमरे वस्तु का दृष्टांत के बाद की कोशिश कर सकते हैं:

import cv 
cam = cv.CaptureFromCAM(-1) 

os.system("v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1") 
os.system("v4l2-ctl --set-parm=30") 

image = cv.QueryFrame(cam) 

कि एक सा hacky है, तो एक दुर्घटना की उम्मीद है।

+1

अच्छा विचार है, लेकिन कोई भाग्य नहीं है। जब मैं os.system() कॉल का प्रयास करता हूं, तो मुझे प्रिंट-आउट मिलता है जो कहता है कि 'VIDIOC_S_FMT: विफल: डिवाइस या संसाधन व्यस्त', जो मुझे बताता है कि जब 'cam = cv.CaptureFromCAM (-1)' कहा जाता है, opencv कैमरे को संसाधन के रूप में लॉक करता है, इसे संशोधित करने से v4l2-ctl को रोकता है। –

+0

हमम, मुझे कुछ उम्मीद करनी चाहिए ... आप ओपनसीवी कोड पर काम करने का प्रयास कर सकते हैं, यह देखने के लिए कि यह कैमरे को कौन सा आदेश भेजता है, और काम करने के लिए क्या आदेश भेजा जाना चाहिए। ऐसा हो सकता है कि ओपनसीवी में एक साधारण एक-पंक्ति परिवर्तन इसे काम करेगा। – Sam

3

the docs से,

समारोह cvSetCaptureProperty वीडियो कैप्चर की निर्दिष्ट संपत्ति सेट। वर्तमान में फ़ंक्शन केवल वीडियो फ़ाइलों का समर्थन करता है: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO। जब FFMPEG (समारोह सामग्री यदि 0 इस्तेमाल किया और दिया जाता है छिपे हुए हैं) के साथ लिनक्स पर नवीनतम सीवीएस डाउनलोड का उपयोग कर

एनबी इस समारोह वर्तमान में कुछ नहीं करता है।

2

यह cammera द्वारा चर हो रहा है।

Afik, Logitech कैमरों विशेष रूप से बुरा linux समर्थन (हालांकि यह; बेहतर मिल रहा है) उनके मुद्दों में से अधिकांश फोकस नियंत्रण विकसित सुविधाओं जैसे हैं। मैं इसे बुनियादी कैमरे (आईई मैनुअल फोकस लॉजिटेक कैमरे) के साथ चिपकने की सलाह दूंगा।

मेरे लैपटॉप कैमरा में बनाया सामान्य संकल्प में कोई मुद्दा है और प्रदर्शित करता है।
मेरे बाहरी लॉजिटेक समर्थक में समस्याएं हैं।

हालांकि, मैं इन दो पंक्तियों के साथ संकल्प मुद्दे को दूर कर सकता हूं।

हां, वे आपके जैसा ही हैं।

cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_WIDTH, 1280) 
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_HEIGHT, 720) 

मेरा लॉजिटेक अभी भी त्रुटियों को फेंकता है लेकिन संकल्प ठीक है।

कृपया सुनिश्चित करें कि आपके द्वारा निर्धारित संकल्प आपके कैमरे द्वारा समर्थित है या v4l आपको चिल्लाएगा। अगर मैं असमर्थित मूल संकल्प सेट करता हूं, तो मुझे शून्य सफलता मिलती है।

0
## Sets up the camera to capture video 
cap = cv2.VideoCapture(device) 

चौड़ाई = 1280, ऊंचाई = 720

#set the width and height 
cap.set(3,width) 
cap.set(4,height) 
3

मैं तुम्हें रूप में एक ही समस्या थी। ओपनसीवी स्रोत में जाकर और modules/highgui/src/cap_v4l.cpp, लाइन 245-246 में डिफॉल्ट पैरामीटर को बदलने और प्रोजेक्ट का पुनर्निर्माण करने के लिए समाप्त हो गया।

#define DEFAULT_V4L_WIDTH 1920 
#define DEFAULT_V4L_HEIGHT 1080 

यह Ubuntu 12.04 में OpenCV 2.4.8

+1

ओपनसीवी 3.0.0 के लिए भी काम करता है। (मैंने अपने मामले में संकल्प को 320x240 तक घटा दिया।) संपादन के लिए फ़ाइल ओपनसीवी 3.0 के लिए 'मॉड्यूल/वीडियोियो/src/cap_v4l.cpp' में बदल गई है। –

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

  • कोई संबंधित समस्या नहीं^_^