一、時間測試
對比於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的性能優化技術
- 儘可能避免在Python中使用循環,特別是雙/三重循環等。它們註定很慢。
- 儘量矢量化算法/代碼,因爲Numpy和OpenCV針對矢量操作進行了優化。
- 利用緩存一致性。
- 除非必要,否則不要複製數組。嘗試使用Numpy視圖。數組的複製是一個代價高昂的操作。
在完成所有這些操作之後,如果代碼仍然很慢,或者使用循環是不可避免的,那麼可以使用像Cython這樣的庫來加快運行速度。