2012-02-14 205 views
13

私はvideoInputでOpenCV2.2を使用しています。私は、openCV2.3.1にアップグレードしたいところです。ここでは、videoInputがOpenCV2.3にマージされているようです。opencvを使用してWebカメラデバイスのリストを取得するにはどうすればよいですか?

私の問題は、利用可能なすべてのビデオソースを返すlistdevices()関数がないようです。

誰かが新しい同等物を知っていますか?

+0

あなたはそれについての完全なコードを置くことができますか?私はすべてのウェブカメラのデバイスを一覧表示しようとしていますが、失敗しました –

答えて

2

thisを参照してください。StackOverflow答え。 OpenCVはクロスプラットフォームであり、カメラの列挙は非常にプラットフォーム固有であるため(たとえば、v4l2はDirectShowとは異なる方法で列挙されるため)、OpenCVでは現在サポートされていません。しかし誰かが戻ってきた間にバージョン2.2に対してenhancement requestを提出しました。

10

あなたは、2.3rc以降、videoinputがOpenCVでマージされていると述べています。

sourceを参照してください。videoinputは、OpenCVの変更ログで指定されているようにhighguiに表示されます。 OpenCVを有効にしてビルドするかどうかは、Cmakeで設定可能なオプションです(オプションはWITH_VIDEOINPUTで、WIN32ビルドであることも必要です。hereを参照)。

OpenCVはlistdevicesを内部でVI.listDevices()と実装しています(CvCaptureCAM_DShow::open)。また、videoInputクラスはCvCaptureCAM_DShowの保護されたメンバーです。

私はDirectShowのインタフェースと列挙子を使用して、すべてのデバイスを列挙することを可能にするクラスをコード化

CvCapture* capture = cvCaptureFromCAM(CV_CAP_DSHOW); 
capture->VI.listDevices(); 
+1

VIを有効にするCMAKEオプションは何ですか?説明していただけますか?サンプルコードスニペットを表示します。 VIは有効なオブジェクトではないと言います。 – 2vision2

1

使用してアクセスlistdevices機能を得ることができます。これはWindows上でのみ機能しますが、作成する必要のある「フレンドリーなデバイス名」とID(例えばVideoCaptureオブジェクト)のリストを取得できます。

コードはここにある:

https://github.com/studiosi/OpenCVDeviceEnumerator

関連する問題