opencv python 优化

Performance Measurement and Improvement Techniques

1使用OpenCV测量性能

cv2.getTickCount:函数返回参考事件(如机器开启时刻)到调用此函数的时钟周期数. 因此,如果在函数执行之前和之后调用它,则会获得用于执行函数的时钟周期数.
cv2.getTickFrequency:函数返回时钟周期的频率,或每秒钟的时钟周期数.

如果要在几秒内找到执行时间:
代码:

import cv2

e1 = cv2.getTickCount()
# your code execution
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()
print(time)

输出:
9.909108700445166e-06

2 OpenCV中的默认优化

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

代码

# check if optimization is enabled
cv2.useOptimized()

输出:True

# Disable it
cv2.setUseOptimized(False)
cv2.useOptimized()

输出:False

性能优化技术

有几种技术和编码方法可以利用Python和Numpy的最大性能。 此处仅注明相关的内容,并提供重要来源的链接。 这里要注意的主要是,首先尝试以简单的方式实现算法。 一旦工作,对其进行分析,找到瓶颈并进行优化。

  • 尽可能避免在Python中使用循环,尤其是双循环/三循环等。它们本身就很慢。
  • 尽可能最大程度地保存算法/代码,因为Numpy和OpenCV针对向量运算进行了优化。
  • Exploit缓存一致性。
  • 除非需要,否则不要复制数组。 尝试使用视图。 阵列复制是一项昂贵的操作。

即使在完成所有这些操作之后,如果您的代码仍然很慢,或者使用大型循环是不可避免的,请使用其他库(如Cython)来加快速度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值