1. 程式人生 > >OpenCV_Python官方文件8——程式效能的檢測及優化

OpenCV_Python官方文件8——程式效能的檢測及優化

OpenCV-Python Tutorials

獲取程式執行時間

OpenCV主要函式

  1. cv2.getTickCount():記錄從參考點到程式執行完成的時間週期數
  2. cv2.getTickFrequency():返回時間頻率,即每秒鐘的時間週期數

Python主要函式

  1. time.time():獲得當前時間的時間戳
  2. time.perf_counter():返回計時器的精準時間(系統的執行時間),包含整個系統的睡眠時間。由於返回值的參考點是未定義的,只有連續呼叫的結果之間的差才是有效的。

獲取放大影象所需要的時間

import cv2
import time 
import os 
os.
chdir('C:/Users/lenovo/Desktop/') bear = cv2.imread('BearBrown.jpg') rows, cols = bear.shape[:2] # 測試放大影象所需要的時間 # 程式執行終止的時間 - 起始時間為程式執行時間 ############### OpenCV庫 ################ start = cv2.getTickCount() #函式執行前的時鐘週期數 bear_dst0 = cv2.resize(bear,(cols*2,rows*3),interpolation=cv2.INTER_CUBIC) #放大影象 end =
cv2.getTickCount() #函式執行完成的時間週期數 time0 = (end-start)/cv2.getTickFrequency() #獲得放大影象所需要的時間 print(time0) ################ time庫 ################# # time.perf_counter()函式 start1 = time.perf_counter() bear_dst1 = cv2.resize(bear,(cols*2,rows*3),interpolation=cv2.INTER_CUBIC) #放大影象 end1 = time.perf_counter(
) - start1 print(end1) # time.time()函式 start2 = time.time() bear_dst2 = cv2.resize(bear,(cols*2,rows*3),interpolation=cv2.INTER_CUBIC) #放大影象 end2 = time.time() - start2 print(end2)

程式優化

OpenCV 中的很多函式都被優化過,但也包含一些沒有被優化的程式碼。在編譯時優化是被預設開啟的。

  1. cv2.useOptimized() 來檢視優化是否被開啟
  2. cv2.setUseOptimized():引數為True開啟優化,False關閉優化。
import cv2
import time 
import os 
os.chdir('C:/Users/lenovo/Desktop/')

bear = cv2.imread('BearBrown.jpg')
rows, cols = bear.shape[:2]

# 測試開啟和關閉所需要的執行時間

cv2.setUseOptimized(True)
print(cv2.useOptimized())

start = cv2.getTickCount() #函式執行前的時鐘週期數
bear_dst0 = cv2.resize(bear,(cols*3,rows*3),interpolation=cv2.INTER_CUBIC) #放大影象
end = cv2.getTickCount() #函式執行完成的時間週期數
time0 = (end-start)/cv2.getTickFrequency() #獲得放大影象所需要的時間

cv2.setUseOptimized(False) # 關閉優化
print(cv2.useOptimized())

start = cv2.getTickCount() #函式執行前的時鐘週期數
bear_dst3 = cv2.resize(bear,(cols*3,rows*3),interpolation=cv2.INTER_CUBIC) #放大影象
end = cv2.getTickCount() #函式執行完成的時間週期數
time3 = (end-start)/cv2.getTickFrequency() #獲得放大影象所需要的時間

print("開啟優化的執行時間為"+str(time0))
print("關閉優化的執行時間為"+str(time3))

執行結果:

True
False
開啟優化的執行時間為0.0073506805537736615
關閉優化的執行時間為0.01660434574697629

效率優化原則

  • Python 的標算比 在Numpy 裡計算快。對於僅包含一兩個元素的運算,Python 比 Numpy 的陣列快。但當陣列元素多時Numpy 快。所以Numpy的執行速度並不一定比Python本身語法快,元素數量較少時,用Python自身的格式計算。
  • 儘量避免使用迴圈,尤其兩層三層的巢狀迴圈,迭代非常慢
  • 優先使用OpenCV/Numpy中封裝好的函式
  • 儘量將資料向量化,變成Numpy的資料格式
  • 儘量避免陣列的複製操作