2011-09-06 16 views
21

利用可能なカメラの台数を取得したいと思います。OpenCV 2.3でカメラをカウントするには?

私はこのようなカメラをカウントしてみました:

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

私は接続されたカメラを持っている場合は、それを開くことができなかったことはありません。 私はさまざまなデバイスをプレビューしようとしましたが、常にカメラのイメージを取得します。

私は第2のカメラを接続すると、デバイス0は、カメラ1とデバイス1-10であるが、私はDirectShowのデバイスに問題があると思いカメラ2

です。

この問題を解決するにはどうすればよいですか?または、OpenCV1のような機能がありますかcvcamGetCamerasCount()

私はWindows 7とUSBカメラを使用しています。

答えて

10

OpenCVには、カメラを列挙したり使用可能なデバイスの数を取得するAPIはまだありません。詳細については、OpenCVバグトラッカーのthis ticketを参照してください。

接続されているデバイスの数よりも大きいデバイス番号の場合、VideoCaptureの動作は未定義であり、カメラとの通信に使用されるAPIに依存します。 OpenCVで使用されるAPIのリストについては、OpenCV 2.3 (C++,QtGui), Problem Initializing some specific USB Devices and Setupsを参照してください。

5

私はPythonでこれを行う:

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のは、そこに何もない場合でも、とにかくCameraオブジェクトをオープンしていますが、その内容を抽出しようとした場合に、属性には何も存在しません。それを使ってあなたのカメラの数をチェックすることができます。それは私がテストしたすべてのプラットフォームで動作するので良いです。

i-1を返す理由は、MacBookProが独自の組み込みカメラを2回カウントするからです。

+1

あなたは 'のIDを入れた場合= -1'それが最初に使用可能なカメラがかかりますので、それはだ... – Lipis

10

それはここで古いポストOpenCVのためのソリューションだ場合でも、2/C++でのWindows 7のx64の下でテスト

/** 
* 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; 
} 

  • OpenCVの3 [カスタムビルド]
  • OpenCVの2.4。 9
  • OpenCV 2.4.8

0-3 Ubbカメラ

+0

は、OpenCVの2.4.8でクラッシュ。 – Prasaathviki

+0

2.4.9私にとってはクラッシュしませんでした(Windows 8.1)。しかし、新しい画像を受け取り、 '.isEmpty'チェックなしでそれを使用しようとすると(ブロックされたカムで捕らえられた画像が空であるため)、クラッシュする異なるプロセスによってブロックされたカメラも検出されます。どういうわけかOpenCVがカメラをクラッシュさせて、PCを再起動してもロックを解除しなかったので、OSで非アクティブにして後で再度アクティブにしなければならなかった... – Micka

+0

Gitのどこかであなたのコードを持っていますか? Windowsプラットフォームの問題またはOpenCVバグの場合 – BlouBlou

6

これは非常に古い投稿ですが、私は、Ubuntu 14.04とOpenCv 3のPython 2.7の下では、ここのソリューションはどれも私のために働いていないことがわかりました。代わりに私はPythonでこのようなものを考え出した:

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ライブラリを使用してこの問題を解決し、Videocaptureオブジェクトにインデックスを渡しました。それは私の問題を解決しました。

0

Python 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()) 
関連する問題