Python-OpenCV(5)
今回のブログでは、pythonの関数、numpyの関数、OpenCVの関数の効率の問題を比較し、機能が同じ場合に適切な関数をどのように選択するかを直感的に認識してみましょう.
プログラム実行時間の測定
(1)pythonのtimeモジュール(2)cv 2.gettickCount()は、クロック数、cv 2を返します.gettickFrequency()は、実行時間(3)Ipythonの%timeitに達する以外は、常に周波数を返します.
実験1
コード:
%timeitはIpythonが提供する魔法関数で、テストの文を複数回繰り返し実行することができ、より正確な実行時間を測定することができます.
pythonのスカラーの演算はnumpyよりも速く,numpyの利点は多次元配列の処理がpythonよりはるかに速いことである.
実験2
コード:
上記の結果から、
一般的にOpenCVの関数はNumpyの関数よりも速い.同じ操作に対してOpenCVの関数を使用することが望ましい
効率最適化に関するアドバイスは、非常に遅い の2層3層サイクルの使用をできるだけ避ける.アルゴリズムでは、NumpyとOpenCVがベクトル動作を最適化するため、ベクトル動作をできるだけ使用する. キャッシュ整合性 を利用する.必要がなければ配列をコピーしないでください.レプリケーションの代わりにビューを使用すると、配列レプリケーションはリソースを非常に浪費する です.
プログラム実行時間の測定
(1)pythonのtimeモジュール(2)cv 2.gettickCount()は、クロック数、cv 2を返します.gettickFrequency()は、実行時間(3)Ipythonの%timeitに達する以外は、常に周波数を返します.
実験1
コード:
In [1]: import numpy as np
In [2]: x = 10
In [3]: %timeit y=x**2
10000000 loops, best of 3: 49.7 ns per loop
In [4]: %timeit y=x*x
10000000 loops, best of 3: 33.1 ns per loop
In [5]: c = np.array([x])
In [6]: %timeit y=c*c
1000000 loops, best of 3: 711 ns per loop
In [7]: %timeit y=c**2
1000000 loops, best of 3: 727 ns per loop
In [8]:
%timeitはIpythonが提供する魔法関数で、テストの文を複数回繰り返し実行することができ、より正確な実行時間を測定することができます.
pythonのスカラーの演算はnumpyよりも速く,numpyの利点は多次元配列の処理がpythonよりはるかに速いことである.
実験2
コード:
In [13]: import numpy as np
In [14]: import cv2
In [15]: img = cv2.imread('/home/gavinzhou/ /ForBlogImage/images/1.png',cv2.IMREAD_GRAYSCALE)
In [16]: img.shape
Out[16]: (397, 550)
In [17]: %timeit z=cv2.countNonZero(img)
100000 loops, best of 3: 14.3 µs per loop
In [18]: %timeit z=np.count_nonzero(img)
1000 loops, best of 3: 366 µs per loop
In [19]:
上記の結果から、
一般的にOpenCVの関数はNumpyの関数よりも速い.同じ操作に対してOpenCVの関数を使用することが望ましい
効率最適化に関するアドバイス