OpenCV篇3---性能测量与改进技术

学习目标:

在图像处理中,由于您每秒处理大量操作,所以您的代码不仅要提供正确的解决方案,还要以最快的方式进行处理。 

1、衡量你的代码的性能;

2、提高代码性能的一些技巧;

3、学习函数:cv2.getTickCount,cv2.getTickFrequency等。

除了OpenCV,Python还提供了一个有助于测量执行时间的模块时间。 另一个模块配置文件有助于获得有关代码的详细报告,例如代码中每个函数占用了多少时间,函数被调用了多少次等等。但是,如果您使用的是IPython,则所有这些功能都集成在一个用户友好 方式。 我们会看到一些重要的内容,有关更多详细信息,请查看附加资源部分中的链接。

1、用OpenCV测量性能

①、cv2.getTickCount函数---返回参考事件(如瞬间机器打开)到调用此函数之后的时钟周期数。 所以如果你在函数执行前后调用它,你会得到用于执行函数的时钟周期数。

②、cv2.getTickFrequency函数---返回时钟周期的频率或每秒钟的时钟周期数。 因此,要在几秒钟内找到执行时间,您可以执行以下操作:

Example1(cv2.getTickCount函数的使用):

e1 = cv2.getTickCount()
# 代码执行
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()

我们将用下面的例子来演示。 以下示例应用中值滤波,奇数大小的内核范围为5至49.

#coding:utf8
import cv2
import numpy as np
from matplotlib import pyplot as plt

img1 = cv2.imread('F:/picture.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)

输出:

0.29563351721527875

注意:也可以用时间模块做同样的事情。 使用time.time()函数而不是cv2.getTickCount。 然后取两次的差别。如下:

#coding:utf8
import cv2
import time

img1 = cv2.imread('F:/picture.jpg')

e1 = time.time()
for i in range(5, 49, 2):
    img1 = cv2.medianBlur(img1, i)
e2 = time.time()
t = (e2 - e1)
print (t)

输出:

0.2426450252532959

2、OpenCV中的默认优化

许多OpenCV功能都使用SSE2,AVX等进行优化。它还包含未优化的代码。 所以如果我们的系统支持这些功能,我们应该利用它们(几乎所有的现代处理器都支持它们)。 编译时默认启用。 因此,OpenCV在启用时运行优化的代码,否则它会运行未优化的代码。 您可以使用cv2.useOptimized()检查是否启用/禁用,并使用cv2.setUseOptimized()启用/禁用它。 我们来看一个简单的例子。

①、使用优化:

#coding:utf8
import cv2
import time
cv2.setUseOptimized(True)
img1 = cv2.imread('F:/picture.jpg')
e1 = time.time()
for i in range(5, 49, 2):
    img1 = cv2.medianBlur(img1, i)
e2 = time.time()
t = (e2 - e1)
print (t)

输出:

0.24064350128173828

②、禁止优化

#coding:utf8
import cv2
import time
cv2.setUseOptimized(False)
img1 = cv2.imread('F:/picture.jpg')
e1 = time.time()
for i in range(5, 49, 2):
    img1 = cv2.medianBlur(img1, i)
e2 = time.time()
t = (e2 - e1)
print (t)

输出:

0.24367284774780273

注意:优化相比于未优化之间提速:0.003029346466064453

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值