OpenCVの-python-研究では、7(プログラムのパフォーマンステストおよびアップグレードを)ノート

1.測定性能OpenCVの

1.1一般的に使用される機能:

RETVAL = cv.getTickCount()

RETVAL = cv.getTickFrequency()

1.2修正された書き込み:

使用のGetTickCount()取得する時間 
E1 = cv.getTickCountを()
#CODE 
E2 = cv.getTickCount()
時間 =(E2 - E1)/ cv.getTickFrequency()

印刷秒(タイム)#結果

 

#の使用time.clock()タイマー
スタート = time.clock()
 #CODE
経過=(time.clock() - スタート)
を印刷秒(タイム)#結果

 

デフォルトの2.OpenCVの最適化

多くのOpenCVの関数は、最適化などSSE2、AVXを使用します。また、暗号化されていないコードが含まれています。だから、私たちのシステムはこれらの機能をサポートしている場合、我々は(ほぼすべての近代的なプロセッサがそれらをサポート)、それらを使用する必要があります。これは、コンパイル時にデフォルトで有効になっています。したがって、OpenCVの最適化されたコードを有効にした場合、コードはそれ以外の場合は非最適化されたコードを実行する、最適化を実行します。あなたはそれを無効/有効にする)(有効/それを無効にし、cv.setuseoptimizationを使用するかどうかをチェックするために)(cv.useoptimizationを使用することができます。

 

通常の状況下でOpenCVのは、numpyの機能よりも速く機能します。したがって、同一の動作のために、好ましくはOpenCVの関数で使用されています。動作させるためにnumpyの(コピーされません)を表示するために使用され、特に例外があります。

 

3. Ipythonにおける検出効率

時にはあなたは、2つの類似の動作性能を比較する必要があるかもしれません。IPythonは、これを行うための魔法のコマンドはtimeitを提供しています。これは、より正確な結果を得るために、低数のコードを実行します。同様に、彼らはまた、単一のコード行を測定するのに適しています。

 

Pythonのスカラ演算速くnumpyのスカラ演算よりも。したがって、動作のためにnumpyのスカラー配列より一つまたは二つの要素、パイソンを含みます。配列のサイズは、それがわずかに大きいときとき、numpyの役割を果たします。

 

我々はポイントでケースを試してみました。今回は、同じ画像cv.countNonZero()とnp.count_nonzero()パフォーマンスを比較します。

[35]中:%はtimeit Z = cv.countNonZero(IMG)
 100000のループ、3の最もよい:15.8 ループあたり米国
【で 36]:%はtimeit Z = np.count_nonzero(IMG)
 1000のループ、3のベスト:370 USループあたり

numpyの機能よりも25倍高速OpenCVの機能。

 

通常、OpenCVのはnumpyの機能よりも速く機能します。このように、同じ動作のために、OpenCVの関数であることが好ましいです。ただし、例外はnumpyのではなく、コピーのビューを使用する場合は特に、あります。

 

4.効率の最適化

  1. ループ、特にダブル、トリプルループを使用しないようにしてください、彼らは本質的に非常に遅いです。
  2. numpyのとOpenCVのは、ベクトル演算用に最適化されているので、アルゴリズムは、ベクトル演算を利用します。
  3. キャッシュ・コヒーレンシを使用します。
  4. その後、配列をコピーしていない、必要はありません。レプリケーションの代わりにビューを使用してください。コピー配列は、リソースの非常に無駄です。

 

おすすめ

転載: www.cnblogs.com/blog-xyy/p/11184357.html