2017-11-28 7 views
0

OpenCV Pythonを使用してビデオからさまざまなフレームを素早く選択して処理しようとしています。フレームを選択するには、私は 'CAP_PROP_POS_FRAMES'(またはcap.set(2、frame_no))を使いました。しかし、これを使用すると、選択されたフレームをデコードするのに約200msの遅延があることがわかりました。私のスクリプトは、フレーム間で多くの(必ずしも時系列ではない)飛び越します。これは、各繰り返しの間に大きな遅延が生じることを意味します。 フレーム番号を設定したあと、OpenCVが今後のフレームをバッファリングしていると思われます。そのため、基本的にビデオ全体をリストにしてRAMからアクセスできるように、ビデオのプリデコードを試みました。これは、大きなビデオが完全に私の記憶を食べることを除いて、幻想的でした。 私は誰かがこの200msの遅延なしにフレーム番号を設定する方法、または私のメモリスペースをすべて使わずにビデオをデコードする方法を知っていることを望んでいました。どんな提案も歓迎です!特定のフレームを高速で選択するOpenCV Python

答えて

0

私はその200msの遅延を回避する方法はわかりませんが、サイズがRAMよりも大きい場合でも、ビデオを最初にデコードする方法についての提案があります。あなたはnumpyのmemmap

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.memmap.htmlを使用できます。

実際には、メモリマップされたこの行列を初期化し、ビデオの各フレームをVideoCaptureで繰り返し処理し、各フレームをこの行列に格納する関数を持つことができます。その後、このメモリマップされた行列にアクセスするだけで各フレーム間をジャンプすることができます。

+0

ありがとう、私はこれを使用しようとします! – CMW

+0

あなたのニーズを満たしているかどうか教えてください – se7entyse7en

関連する問題