1

新しい画像を作成し、forループを使用して映画の各フレームを通過し、各反復を通過する明白な方法以外に、これを行うためのより効率的な方法(たとえば、より高速/低レベルですでに実装されている関数を使用)はありますか?フレーム内の各ピクセル。現在の値よりも大きい場合は、対応するピクセル値で画像を更新します。

私は確かにcv.Get2Dを使用してフレーム内の個々のピクセルにアクセスできるので、それは問題なくダンディです。何ギガバイトものグレースケールビデオでこれを行うので、これを行うためのより高速な、またはよりハードウェアに最適化された方法を利用できるかどうか疑問に思っています。

4

2 に答える 2

2

これを行うには多くの方法があり、「最良の」方法は、使用できるハードウェアによって異なります。

優れたAMDビデオカードを使用している場合は、AMDのOpenVideo Decodeライブラリを使用してフレームをGPUに配信してから、OpenCLを使用して計算を行うことができます。それは速く邪悪になります。

AMDグラフィックカードを持っていないが、素敵なNVidiaカードまたはIntel HD4000(新しいIvyBridgeベースのCorei7システム)を持っている場合は、OpenCVを使用してフレームを読み取り、そのデータをOpenCLに渡してから引き続き大規模な並列であなたの数学を行います。

優れたビデオカードがない場合でも、OpenCL CPUコンテキストを使用して計算を行うことができます。int4ベクトルデータ型を使用する場合、コードはIntelまたはAMDプロセッサのSSE2レジスタを使用します。これは、質問文で述べられているように、ナイーブなピクセル反復の4倍以上の速度である必要があります。

于 2012-10-21T00:20:48.400 に答える
1

K. Braffordが質問の「OpenCVまたはPIL」の部分に直接回答しなかったため、回答を追加する

ここで行われたベンチマークから、OpenCVが明らかに勝者であるように思われます。

于 2018-08-11T01:22:26.980 に答える