2012-01-26 10 views
3

OpenCVについて奇妙なことに気付きました。 OpenCVで提供されている基本的なサンプルCプログラムの1つを使用して、カメラ出力を画面に表示しました。しかし、私は、カメラが見るものに比べてわずかな遅れで、画面上の出力を見ています。カメラの前で手を動かすと、約0.1秒遅れて画面に表示されます。これらの遅延に非常に敏感なアプリケーションを開発しています。画像転送が瞬時になるようにこの遅延を取り除く方法はありますか? Skypeを使ってカメラの出力を見ると、私は少し遅れることはありません。画面上でのカメラ出力のOpenCV遅延

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

+0

最終出力の解像度は?そしてそれはskypesの解像度とどう違うのですか?どのサンプルも指定できますか?どのオペレーティングシステムを使用していますか? –

+1

ほとんどの場合、カメラを遅滞なくキャプチャするために、高度に最適化された独自のライブラリを作成する必要があります。 OpenCVで使用されているようなシンプルなドライバには固有の遅延があります – Sam

+0

プラットフォームはWindows 7 64ビットです。出力解像度は640x480です。サンプルコードは簡単です。これはcamera.pyと呼ばれ、pythonのsamplesディレクトリにあります。 SkypeとOpenCVの出力速度の量的な違いは分かりませんが、ビデオを見て、手前に手を動かすだけで、opencvでimshow()を使ってビデオを出力すると、約0.1秒の遅延がありますが、Skypeカメラの出力にはほとんど遅延がありません。 OpenCVドライバに固有の遅延がある場合、これはOpenCVの問題であり、技術を変更する必要があります。助けてくれてありがとう! – pkout

答えて

4

openCV highgui表示ウィンドウは、画像処理結果を簡単に表示するためのものです。高性能または低遅延のために最適化されていません。

あなたはvideoinputライブラリや、使用したいディスプレイライブラリを話すために何かを書く必要があります。

+0

お返事ありがとうございます。だから、ビデオ出力をスクリーンに出力するのではなく、ファイルに保存すれば、何の遅延もありません。それはうまくいくと思いますか?私はそれを画面に表示する必要はありません。私は画像を実質的に即座に処理する必要があります。それは重要なことのすべてです。ありがとう! – pkout

+0

videoinputのlibは、どんなdirectshowフィルタが使われているかにもかかわらず、かなり良いです。画像が比較的小さい場合、現代のPCは低フレームレートで「リアルタイム」で多くの処理を行うことができます。 60fpsで1920x1080pの画像を複雑に処理する必要がある場合は、処理が煩雑になります。 –

+0

カメラは640x480ピクセルの解像度で動作していますが、私は意図的に画像処理を行っていません。私はカメラからフレームを読み込み、cv :: imshow()を使って画面に表示しています。したがって、何らかの処理が行われていれば、画面に表示される画像を取得するために必要なものだけです。それでも微妙な遅れがあります。この遅延は、他のソフトウェアでは発生しません。 highguiライブラリの問題がフレームを十分に速く表示していないことを願っています。ありがとう! – pkout

1

確かに、私がhighguiビデオ出力をオフにしたら、処理速度は大幅に上がり、FPSもそれに沿って増加しました。今では、アプリケーションは80 FPSでフレームを取得して処理することができます。新しいビデオ出力ライブラリを作成する必要がない類似の問題に対する1つの解決策は、処理能力を節約するために、ビデオの10番目のフレームだけを表示することです。

ありがとうございました

+1

ほとんどの人が気づいていないが、大きな問題を引き起こしている別の要因 - LCD画面の内部電子機器はしばしば3-4フレーム(@ 60fps)の遅延があり、正確な手渡しをしようとすると、目の仕事 –

+0

うーん、私はそれを知らなかった。共有してくれてありがとう。将来的に知ることは有益かもしれない。 – pkout

関連する問題