一、时间测试
对比于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这样的库来加快运行速度。