web-dev-qa-db-ja.com

opencvを使用してWebカメラデバイスのリストを取得するにはどうすればよいですか?

私はvideoInputでOpenCV2.2を使用しています。 videoInputが明らかにOpenCV2.3にマージされているOpenCV2.3.1にアップグレードしたいと思います。

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

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

13
Phil Hannent

あなたが言ったように、videoinputは2.3rc以来OpenCVにマージされています。

関連する source を見ると、OpenCVの変更ログで指定されているようにvideoinputはhighguiにあるように見えます。 OpenCVが有効になってビルドされているかどうかは、Cmakeで構成可能なオプションです(オプションは_WITH_VIDEOINPUT_であり、WIN32ビルドである必要があります。 ここ を参照してください)。

OpenCVは、_CvCaptureCAM_DShow::open_の実装でVI.listDevices()として内部的にlistdevicesを呼び出し、videoInputクラスはCvCaptureCAM_DShowの保護されたメンバーです。

あなたはを使用してアクセスリストデバイス機能を取得することができます

_ CvCapture* capture = cvCaptureFromCAM( CV_CAP_DSHOW );
 capture->VI.listDevices();
_
10
Appleman1234

this StackOverflowの回答を参照してください。クロスプラットフォームであり、カメラの列挙はプラットフォーム固有であるため、現在OpenCVではサポートされていません(たとえば、v4l2はDirectShowとは異なる方法で列挙します)。しかし、誰かがしばらく前にバージョン2.2に対して 拡張要求 を送信しました。

2
mevatron

DirectShowインターフェイスと列挙子を使用してすべてのデバイスを列挙できるクラスをコーディングしました。 Windowsでのみ機能しますが、「わかりやすいデバイス名」のリストと、作成する必要のあるID(VideoCaptureオブジェクトなど)を取得できます。

コードはここにあります:

https://github.com/studiosi/OpenCVDeviceEnumerator

1
dagilpe