2009-07-22 6 views
2

MacOSXでOpenCVを使用して私のウェブカメラからビデオをキャプチャしています。それはうまく動作しますが、キャプチャしたビデオをQuickTimeで再生しようとすると再生が速すぎます。つまり、カメラから10秒間キャプチャしますが、QuickTimeで再生する場合は2秒です。OpenCVビデオキャプチャとfpsの問題

私は10に25からFPSを変更しようとしたとそれはかなりうまく動作しますが、私はそれが正しいプロセスではないと確信しています:

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カメラの出力を表示していますが、このウィンドウでどのように品質を向上させることができますか?

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

アンドレア!

答えて

2

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

実際に問題が発生しているかどうかを確認するには、画像データをメモリに保存するようにしてください。私はそれを試していないが、私はあなたが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 
+0

はい、CPU使用量が多すぎます。多少なりとも90%ですが、問題はcvShowImage( "Capture"、image)です。ウェブカメラからの画像をウィンドウに表示する。 キャプチャ中に画像を隠そうとしましたが、問題は解決しません。すべてのmovファイルが速すぎます。 XCodeサンプルを使用してビデオをキャプチャすると、この問題は発生しません。私はgcc 4-0-1を使用しています。 –

1

私は私はあなたがカメラを持っていないので、それはかもしれ信じているが、10 fpsのは、標準であることを確認これは10fps以上でキャプチャします(これはおそらく問題です)。

私は33fpsあるべきwaitkey(30)を、使用しているので、これはまだ奇妙ですが、それは正確に10

2

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

問題は、あなたがカメラから毎秒以下のフレームを取得しているし、あなたがビデオファイルに

よろしく、 サレをより多くのフレームを書いているということです。

2

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

関連する問題