2011-09-06 10 views
21

मैं उपलब्ध कैमरों की संख्या प्राप्त करना चाहता हूं।ओपनसीवी 2.3 में कैमरों की गणना कैसे करें?

मैं इस तरह कैमरों की गिनती करने की कोशिश की:

for(int device = 0; device<10; device++) 
{ 
    VideoCapture cap(device); 
    if (!cap.isOpened()) 
     return device;   
} 

अगर मैं एक कैमरा जुड़ा हुआ है, इसे खोलने में विफल कभी नहीं। इसलिए मैंने विभिन्न उपकरणों का पूर्वावलोकन करने की कोशिश की लेकिन मुझे हमेशा अपने कैमरे की छवि मिलती है।

अगर मैं एक दूसरा कैमरा कनेक्ट, डिवाइस 0 कैमरा 1 और डिवाइस 1-10 कैमरे हैं 2.

मुझे लगता है कि डायरेक्टशो उपकरणों के साथ एक समस्या है।

इस समस्या को हल करने के लिए कैसे करें? या ओपनसीवी 1 cvcamGetCamerasCount() में कोई फ़ंक्शन है?

मैं विंडोज 7 और यूएसबी कैमरे का उपयोग कर रहा हूं।

उत्तर

10

ओपनसीवी में अभी भी कैमरे की गणना करने या उपलब्ध उपकरणों की संख्या प्राप्त करने के लिए कोई एपीआई नहीं है। विवरण के लिए ओपनसीवी बग ट्रैकर पर this ticket देखें।

वीडियो कैप्चर का व्यवहार डिवाइस संख्याओं के लिए अपरिभाषित है, तो डिवाइसों की संख्या अधिक है और आपके कैमरे के साथ संवाद करने के लिए उपयोग की गई एपीआई से निर्भर करता है। ओपनसीवी में उपयोग की गई एपीआई की सूची के लिए OpenCV 2.3 (C++,QtGui), Problem Initializing some specific USB Devices and Setups देखें।

5

मैं अजगर में ऐसा करते हैं:

def count_cameras(): 
    for i in range(10): 
     temp_camera = cv.CreateCameraCapture(i-1) 
     temp_frame = cv.QueryFrame(temp_camera) 
     del(temp_camera) 
     if temp_frame==None: 
      del(temp_frame) 
      return i-1 #MacbookPro counts embedded webcam twice 

दुर्भाग्य OpenCV कैमरा वस्तु खोलता है वैसे भी, भले ही कोई बात नहीं है, लेकिन अगर आप अपनी सामग्री को निकालने के लिए प्रयास करते हैं, वहाँ से जोड़कर देखते हैं करने के लिए कुछ भी नहीं किया जाएगा। आप कैमरे की संख्या की जांच के लिए इसका उपयोग कर सकते हैं। यह परीक्षण किए गए हर प्लेटफ़ॉर्म में काम करता है, इसलिए यह अच्छा है।

i-1 लौटने का कारण यह है कि मैकबुकप्रो अपने स्वयं के एम्बेडेड कैमरे को दो बार गिना जाता है।

+1

यह क्योंकि अगर आप 'आईडी डाल = -1' यह पहली उपलब्ध कैमरा ले जाएगा है .. – Lipis

10

यहां तक ​​कि अगर यह एक पुरानी पोस्ट यहाँ OpenCV के लिए एक समाधान है 2/C++

/** 
* Get the number of camera available 
*/ 
int countCameras() 
{ 
    cv::VideoCapture temp_camera; 
    int maxTested = 10; 
    for (int i = 0; i < maxTested; i++){ 
    cv::VideoCapture temp_camera(i); 
    bool res = (!temp_camera.isOpened()); 
    temp_camera.release(); 
    if (res) 
    { 
     return i; 
    } 
    } 
    return maxTested; 
} 

साथ विंडोज 7 x64 के तहत परीक्षण किया गया:

  • OpenCV 3 [कस्टम बिल्ड]
  • OpenCV 2.4। 9
  • ओपनसीवी 2.4.8

0 से 3 यूएसबी कैमरे

+0

जब कैमरा खोलना यदि मौजूद नहीं है opencv 2.4.8 पर दुर्घटनाग्रस्त। – Prasaathviki

+0

2.4.9 मेरे लिए क्रैश नहीं होता (विंडोज 8.1)। लेकिन यह भी एक कैमरा है कि एक अलग प्रक्रिया है जो करता है, तो आप एक नई छवि प्राप्त करने के लिए कोशिश दुर्घटना और (क्योंकि छवि एक अवरुद्ध कैम द्वारा पकड़ा खाली है) एक '.isEmpty' जांच के बिना इसका इस्तेमाल करने की कोशिश करेंगे द्वारा अवरुद्ध है पाता है। किसी तरह OpenCV मेरे कैमरे दुर्घटनाग्रस्त हो गया और फ्लॉप पीसी को पुनः आरंभ करने के बाद भी इसे अनलॉक, तो मैं ओएस में उसे निष्क्रिय और बाद में पुन: सक्रिय करने के लिए किया था ... – Micka

+0

आप अपने कोड Git में कहीं है, मैं भी विंडोज़ 8.1 है और मैं जाँच करने के लिए चाहते हैं अगर यह एक विंडोज प्लेटफॉर्म समस्या या एक OpenCV बग है – BlouBlou

6

यह एक बहुत पुरानी पोस्ट है, लेकिन मैंने पाया कि पाइथन 2.7 के तहत उबंटू 14.04 और ओपनसीवी 3 पर मेरे यहां कोई भी समाधान नहीं है।

import cv2 

def clearCapture(capture): 
    capture.release() 
    cv2.destroyAllWindows() 

def countCameras(): 
    n = 0 
    for i in range(10): 
     try: 
      cap = cv2.VideoCapture(i) 
      ret, frame = cap.read() 
      cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
      clearCapture(cap) 
      n += 1 
     except: 
      clearCapture(cap) 
      break 
    return n 

print countCameras() 

हो सकता है कि किसी को यह उपयोगी मिल जाएगा: इसके बजाय मैं अजगर में कुछ इस तरह के साथ आया था।

0

मुझे भी इसी प्रकार की समस्या का सामना करना पड़ा है। मैंने कैमरे की गणना के लिए OpenCv की बजाय VideoInput.h लाइब्रेरी का उपयोग करके समस्या हल की और इंडेक्स को वीडियोकैप्चर ऑब्जेक्ट में पास कर दिया। यह मेरी समस्या हल हो गया।

0

पायथन 3।6:

import cv2 

# Get the number of cameras available 
def count_cameras(): 
    max_tested = 100 
    for i in range(max_tested): 
     temp_camera = cv2.VideoCapture(i) 
     if temp_camera.isOpened(): 
      temp_camera.release() 
      continue 
     return i 

print(count_cameras()) 
संबंधित मुद्दे