本节说明opencv-python对于性能的度量和优化 。



以下为代码部分:

%matplotlib inline
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('e:/rotman.jpg')
plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) #显示原图
<matplotlib.image.AxesImage at 0x1f8ef631a58>

OpenCV-Python learning-7.运算性能_python

getTickCount()指令

t1=cv2.getTickCount() #返回操作系统启动到现在时钟周期数
t1
762915676900
t2=cv2.getTickCount() #返回操作系统启动到现在时钟周期数
t2
762917216047
t=(t2-t1)/cv2.getTickFrequency() #时钟周期数/频率,单位秒
t
0.631445441186003
import copy
img2=copy.copy(img)
img2=cv2.medianBlur(img,9) #中值滤波
plt.imshow(cv2.cvtColor(img2,cv2.COLOR_BGR2RGB))
<matplotlib.image.AxesImage at 0x1f8ef71d748>

OpenCV-Python learning-7.运算性能_系统启动_02

计时工具%timeit指令

x = 5
%timeit y=x**2 # 使用 %timeit 多次运行某条命令从而进行比较
241 ns ± 2.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit y=x*x
46.5 ns ± 0.124 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
import numpy as np
%timeit y=np.square(x)
710 ns ± 5.22 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

useOptimized?

cv2.useOptimized()#是否支持opencv的如sse2、avx优化代码
True
img=cv2.imread('E:\bizhi.jpg')
cv2.setUseOptimized(True)
%timeit res = cv2.medianBlur(img,299)
446 ns ± 1.82 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
cv2.setUseOptimized(False)#禁用优化代码
cv2.useOptimized()
False
%timeit res = cv2.medianBlur(img,299)
459 ns ± 18.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)