2

MacOSX で OpenCV を使用して Web カメラからビデオをキャプチャしています。正常に動作しますが、キャプチャしたビデオを QuickTime で再生しようとすると、再生が速すぎます。つまり、カメラから 10 秒間キャプチャしますが、QuickTime で再生すると、ビデオは 2 秒になります。

fps を 25 から 10 に変更しようとしましたが、問題なく動作しますが、正しいプロセスではないと確信しています。

CvVideoWriter *writer = 0;  
int isColor = 1;
int fps     = 25;
int frameW  = 640; // 744 for firewire cameras
int frameH  = 480; // 480 for firewire cameras

問題は、今のところ WebCam でキャプチャする必要があることですが、プログラムの本当の目的は、Mac に接続された外部ソースから画像をキャプチャすることです。

このコードを使用してキャプチャしています:

for (;;) {
  cvGrabFrame(capture)
  image = cvRetrieveFrame(capture);
  cvWriteFrame( writer, image );
}

ヒントはありますか?cvNamedWindow で Web カメラの出力も表示していますが、このウィンドウの品質を向上させるにはどうすればよいですか?

どうもありがとうございました!

アンドレア!

4

4 に答える 4

2

、および異なる値で使用cvCreateVideoWriter(filename, fourcc, fps, frame size, is color)します。カメラからのフレームの fps 値が既にわかっている場合は、それを使用します。fps = 10fps = 20

問題は、カメラから取得する 1 秒あたりのフレーム数が少なく、ビデオ ファイルに書き込むフレーム数が多いことです。

よろしく、サレ。

于 2012-01-23T09:59:11.987 に答える
2

キャプチャしたビデオを圧縮してファイルに保存すると、CPU の負荷が高すぎる可能性があります。その場合、実際には cvNamedWindow に 10 FPS しか表示されず、10 FPS だけがファイルに書き込まれます。ファイルで 25 FPS を指定すると、自然に再生速度がいくらか速くなります。

それが本当にあなたの問題かどうかを確認するには、画像データをメモリにのみ保存してみてください。私はそれを試していませんが、cvCloneImage() でそれを行うと思います。

ビデオを保存するために、CPU オーバーヘッドの低い他の形式を試すこともできます。

CV_FOURCC('P','I','M','1')    = MPEG-1 codec
CV_FOURCC('M','J','P','G')    = motion-jpeg codec (does not work well)
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
于 2009-07-22T22:58:04.700 に答える
2

あなたが言及したのと同様のパフォーマンス(約10fps)を持っていましたが、連続したretrieveFrame()呼び出しが永遠にかかっていることがわかりました。デフォルト値は 0 であることがわかりました。getCaptureProperty(CV_CAP_PROP_FPS)使用してこの値を 25 に変更したところ、setCaptureProperty(CV_CAP_PROP_FPS,25.0)はるかに高速にキャプチャできました。

于 2012-08-28T04:45:57.623 に答える
1

10 fps が標準であることを確認しましたが、10 fps 以上でキャプチャするカメラを持っていないことが原因である可能性があります (これが問題である可能性があります)。

を使用しているため、これはまだ奇妙ですがwaitkey(30)、これは である必要がありますが33fps、正確には 10 です。

于 2010-03-17T11:37:24.810 に答える