OpenCV_Python官方文档8——程序性能的检测及优化

本文档介绍了如何在OpenCV_Python环境中检测和优化程序性能。内容包括使用OpenCV和Python的主要函数来测量运行时间,探讨了OpenCV的优化设置,以及提供了效率优化的原则,如避免循环和利用Numpy进行向量化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV-Python Tutorials

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html
图像处理实际上是对矩阵的处理和操作,数据量巨大,每一秒钟都在进行大量的运算。如果程序代码写的不好,性能差距将会很大,代码的执行效率也会大打折扣。因此对程序的要求不仅要求结果准确,更要高效。

获取程序运行时间

OpenCV主要函数
  1. cv2.getTickCount():记录从参考点到程序执行完成的时间周期数
  2. cv2.getTickFrequency():返回时间频率,即每秒钟的时间周期数
Python主要函数
  1. time.time():获得当前时间的时间戳
  2. time.perf_counter():返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的参考点是未定义的,只有连续调用的结果之间的差才是有效的。

获取放大图像所需要的时间

import cv2
import time 
import os 
os.chdir('C:/Users/lenovo/Desktop/')

bear = cv2.imread('BearBrown.jpg')
rows, cols = bear.shape[:2]

# 测试放大图像所需要的时间
# 程序执行终止的时间 - 起始时间为程序运行时间
############### OpenCV库 ################
start = cv2.getTickCount() #函数执行前的时钟周期数
bear_dst0 = cv2.resize(bear,(cols*2,rows*3),interpolation=cv2.INTER_CUBIC) #放大图像
end = cv2.getTickCount() #函数执行完成的时间周期数
time0 = (end-start)/cv2.getTickFrequency() #获得放大图像所需要的时间
print(time0)

################ time库 #################
# time.perf_counter()函数
start1 = time.perf_counter()
bear_dst1 = cv2.resize(bear,(cols*2,rows*3),interpolation=cv2.INTER_CUBIC) #放大图像
end1 = time.perf_counter() - start1 
print(end1)

# time.time()函数
start2 = time.time()
bear_dst2 = cv2.resize(bear,(cols*2,rows*3),interpolation=cv2.INTER_CUBIC) #放大图像
end2 = time.time() - start2
print(end2)

程序优化

OpenCV 中的很多函数都被优化过,但也包含一些没有被优化的代码。在编译时优化是被默认开启的。

  1. cv2.useOptimized() 来查看优化是否被开启
  2. cv2.setUseOptimized():参数为True开启优化,False关闭优化。
import cv2
import time 
import os 
os.chdir('C:/Users/lenovo/Desktop/')

bear = cv2.imread('BearBrown.jpg')
rows, cols = bear.shape[:2]

# 测试开启和关闭所需要的运行时间

cv2.setUseOptimized(True)
print(cv2.useOptimized())

start = cv2.getTickCount() #函数执行前的时钟周期数
bear_dst0 = cv2.resize(bear,(cols*3,rows*3),interpolation=cv2.INTER_CUBIC) #放大图像
end = cv2.getTickCount() #函数执行完成的时间周期数
time0 = (end-start)/cv2.getTickFrequency() #获得放大图像所需要的时间

cv2.setUseOptimized(False) # 关闭优化
print(cv2.useOptimized())

start = cv2.getTickCount() #函数执行前的时钟周期数
bear_dst3 = cv2.resize(bear,(cols*3,rows*3),interpolation=cv2.INTER_CUBIC) #放大图像
end = cv2.getTickCount() #函数执行完成的时间周期数
time3 = (end-start)/cv2.getTickFrequency() #获得放大图像所需要的时间

print("开启优化的运行时间为"+str(time0))
print("关闭优化的运行时间为"+str(time3))

运行结果:

True
False
开启优化的运行时间为0.0073506805537736615
关闭优化的运行时间为0.01660434574697629

效率优化原则

  • Python 的标算比 在Numpy 里计算快。对于仅包含一两个元素的运算,Python 比 Numpy 的数组快。但当数组元素多时Numpy 快。所以Numpy的运行速度并不一定比Python本身语法快,元素数量较少时,用Python自身的格式计算。
  • 尽量避免使用循环,尤其两层三层的嵌套循环,迭代非常慢
  • 优先使用OpenCV/Numpy中封装好的函数
  • 尽量将数据向量化,变成Numpy的数据格式
  • 尽量避免数组的复制操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值