浅析OpenCV和Python中的的程序性能检测

    科技2022-08-08  102

      在图像处理的过程中,我们不仅在乎图像处理的准确度,还需要考虑程序的效率。本文则对于OpenCV3和python中用来进行性能检测的函数进行介绍:

    使用OpenCV进行程序性能检测

    在opencv4.4.0版本中,其提供有关时间的处理函数cv2.getTickCount() 和cv2.getTickFrequency()。 getTickCount() 函数的返回值为从参考点到函数执行时刻的时钟数, getTickFrequency() 函数的返回值为时钟频率(每秒时钟数)。 下面的例子是使用不同窗口大小做中值滤波作为被评测的函数:

    import numpy as np import cv2 img = cv2.imread(r'ch03\OpenCV.jpg') # 记录开始时的时钟数 e1 = cv2.getTickCount() # 使用不同窗口大小做中值滤波 for i in range(5, 49, 2): img = cv2.medianBlur(img, i) # 记录结束时的时钟数 e2 = cv2.getTickCount() # 先求结束和开始的时间差,再求其与时钟频率的比值,获得程序运行时间 time = (e2 - e1) / cv2.getTickFrequency() print(time)

    执行结果为:0.6663654

    使用python的time库进行程序性能检测

    Python的time.clock()函数以浮点数计算的秒数返回当前的CPU时间。Python 3.8 已移除 clock() 方法,可以使用 time.perf_counter() 或 time.process_time() 方法替代。

    1.调用time.clock()

    # 记录开始时的时间 start = time.clock() # 使用不同窗口大小做中值滤波 for i in range(5, 49, 2): img = cv2.medianBlur(img, i) # 记录结束时的时间 end = time.clock() # 计算函数执行使用的时间 elapsed = end - start print(elapsed)

    执行结果为:0.6591353000000026,此时系统会提示DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead.

    2.调用time.perf_counter()

    # 记录开始时的时间 start = time.perf_counter() # 使用不同窗口大小做中值滤波 for i in range(5, 49, 2): img = cv2.medianBlur(img, i) # 记录结束时的时间 end = time.perf_counter() # 计算函数执行使用的时间 elapsed = end - start print(elapsed)

    执行结果为:0.6632472000000007 也可以调用函数 time.perf_counter_ns() 返回的时间是以ns为单位,返回值为679703800

    3.调用 time.process_time()

    # 记录开始时的时间 start = time.process_time() # 使用不同窗口大小做中值滤波 for i in range(5, 49, 2): img = cv2.medianBlur(img, i) # 记录结束时的时间 end = time.process_time() # 计算函数执行使用的时间 elapsed = end - start print(elapsed)

    执行结果为:0.65625

    Processed: 0.012, SQL: 9