2

現在、OpenCVを使用してリアルタイムアプリケーションを作成しています。次の場合:Firewire 800に接続されたHDVカメラから画像をキャプチャしようとしています。cvCaptureFromCamで使用されるインデックスをループしようとしましたが、カメラができません。 tが見つかりません(Webカメラを除く)。

私のコードサンプルがあります、それはインデックスでループします(0をエスケープするとウェブカメラのインデックスになります):

CvCapture* camera;
int index;
for (index = 1; index < 100; ++index) {
    camera = cvCaptureFromCAM(index);
    if (camera)
        break;
}    
if (!camera)
    abort();

いつでも中止時に停止します。

私はOSX10.7でコンパイルしていて、テストしました:

  • OpenCV1.2プライベートフレームワーク
  • OpenCV 2.0プライベートフレームワーク(ここにあります:OpenCV2.0.dmg
  • 自分でコンパイルしたOpenCV(ver。2)

問題がわかっていて、これについて多くの議論があることは知っていますが、解決策を見つけることができません。

誰かが同じケースにあったことがありますか?

よろしく。

4

2 に答える 2

6

firewire を明示的に選択するには、インデックスに 300 を追加してみてください。少なくとも OpenCV 2.4 では、各タイプのカメラに特定のドメインが与えられます。たとえば、Video4Linux にはドメイン 200 が与えられているため、200 は最初の V4L カメラ、201 は 2 番目のカメラなどです。Firewire の場合、ドメインは 300 です。100 未満のインデックスを指定すると、OpenCV は各ドメインを繰り返し処理します。これは、期待どおりの順序ではない可能性があります。たとえば、Web カメラが最初に検出され、firewire カメラが検出されない場合があります。これが問題でない場合は、私の謝罪を受け入れてください.

于 2012-11-01T19:25:52.340 に答える
2

index1ではなく0から開始する必要があります。

それでもうまくいかない場合は、お使いのカメラが OpenCV でサポートされていない可能性があります。互換性リストにあるかどうかを確認することをお勧めします。

于 2012-04-20T16:36:43.333 に答える