# -*-coding:utf-8# 使用OpenCV檢測程序效率# 兩個函數(shù):# cv2.getTickCount():返回從參考點到這個函數(shù)被執(zhí)行的時鐘數(shù)# cv2.getTickFrequency():返回時鐘頻率import cv2import numpy as np# # 使用范例 獲得函數(shù)執(zhí)行時間# e1 = cv2.getTickCount() # 執(zhí)行開始時間(我的理解)# # 所要執(zhí)行的代碼# e2 = cv2.getTickCount() # 之行結(jié)束時間(我的理解)# time = (e2-e1)/cv2.getTickFrequency() # 得到函數(shù)執(zhí)行時間# 除了這種方法,還可以通過time.time()來獲得函數(shù)執(zhí)行的時間# OpenCV中的默認優(yōu)化# OpenCV中許多函數(shù)是優(yōu)化過的,也有一些是沒有優(yōu)化的,如果我們的編譯系統(tǒng)的是支持優(yōu)化的話,# 那么在編譯的時候就會優(yōu)化,可以通過cv2.uSEOptimized來查看優(yōu)化是否開啟,若沒有開啟,則可以# 通過cv2.setUseOptimized()來開啟# 默認# PRint cv2.useOptimized()# # 關(guān)閉# cv2.setUseOptimized(False)# print cv2.useOptimized()# # 開啟# cv2.setUseOptimized(True)# print cv2.useOptimized()# 結(jié)果:# True# False# True# 效率優(yōu)化技術(shù)有些技術(shù)和編程方法可以讓我們最大的發(fā)揮 Python 和 Numpy 的威力。# 我們這里僅僅提一下相關(guān)的,你可以通過超鏈接查找更多詳細信息。我們要說的最重要的一點是:# 首先用簡單的方式實現(xiàn)你的算法(結(jié)果正確最重要),當結(jié) 果正確后,再使用上面的提到的方法# 找到程序的瓶頸來優(yōu)化它。# 1. 盡量避免使用循環(huán),尤其雙層三層循環(huán),它們天生就是非常慢的。# 2. 算法中盡量使用向量操作,因為 Numpy 和 OpenCV 都對向量操作進行 了優(yōu)化。# 3. 利用高速緩存一致性。# 4. 沒有必要的話就不要復制數(shù)組。使用視圖來代替復制。數(shù)組復制是非常浪費資源的。# 就算進行了上述優(yōu)化,如果你的程序還是很慢,或者說大的訓話不可避免的話, 你你應該嘗試使用其他的包,# 比如說 Cython,來加速你的程序。
新聞熱點
疑難解答