OpenCV之時間測試和性能優化技術

一、時間測試

對比於Ipython中使用的   %time  (後加多行代碼) 、  %timeit  (後加單行代碼),OpenCV也有自己的時間測試計算函數

  • cv2.getTickCount:函數返回一個參考事件(就像機器開啓的瞬間)到此函數被調用之間的時鐘週期數。所以如果你在一個函數執行之前和之後調用它,你會得到用來執行一個函數的時鐘週期數。
  • cv2.getTickFrequency:函數返回時鐘週期的頻率或每秒鐘的時鐘週期數。所以要以秒數爲單位測量執行的時間

python測試代碼:

以中值濾波爲例

import cv2
import numpy as np

img1 = cv2.imread("C:/Users/NWPU/Desktop/1.jpg")
e1 = cv2.getTickCount()
#中值濾波
for i in range(5, 49, 2):
    img1 = cv2.medianBlur(img1, i)
e2 = cv2.getTickCount()
t = (e2 - e1) / cv2.getTickFrequency()
print(t)

 

二、python和Numpy的性能優化技術

  1. 儘可能避免在Python中使用循環,特別是雙/三重循環等。它們註定很慢。
  2. 儘量矢量化算法/代碼,因爲Numpy和OpenCV針對矢量操作進行了優化。
  3. 利用緩存一致性。
  4. 除非必要,否則不要複製數組。嘗試使用Numpy視圖。數組的複製是一個代價高昂的操作。

在完成所有這些操作之後,如果代碼仍然很慢,或者使用循環是不可避免的,那麼可以使用像Cython這樣的庫來加快運行速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章