前言

opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍程序性能检测及优化,坚持学习,共同进步。

系列教程参照OpenCV-Python中文教程

系统环境

系统:win7_x64;

python版本:python3.5.2;

opencv版本:opencv3.3.1;

内容安排

1.知识点介绍;

2.测试代码;

具体内容

1.知识点介绍;

本文使用到的库有cv2/numpy/time/profile,涉及函数有cv2.getTickCount,cv2.getTickFrequency;

1.1 使用opencv检测程序效率;

cv2.getTickCount函数返回从参考点到这个函数被执行的时钟数。在一个函数执行前后都调用它,可以得到这个函数的执行时间。
cv2.getTickFrequency返回时钟频率,或者说每秒钟的时钟数;python中time模块也可以实现,调用的函数是time.time();

e1 = cv2.getTickCount()
#do something
e2 = cv2.getTickCount()
time = (e2-e1)/cv2.getTickFrequency()

1.2 OpenCV中的默认优化;
cv2.useOptimized()来查看优化是否被开启,cv2.setUesOptimized()来开启优化。

cv2.setUseOptimized(False)
cv2.useOptimized()

1.3 在IPython中检测程序效率,比较两个相似操作的效率时,你可以使用 IPython 为你提供的法命令%time。

1)如何运行ipython;

打开cmd -> 输入ipython -> 输入程序

2)使用ipython测试程序效率(time/timeit);

注意:Python的标算比 Numpy 的标算快。对于仅包含一两个元素的操作Python标算比 Numpy 的数组快,但是当数组稍微大一点时Numpy就会胜出了。

1.4 效率优化技术

有些技术和编程方法可以较大的发挥Python和Numpy的威力。可以先用简单的方式实现算法得到结果,当结果正确后再使用上面的方法进行优化。

1)尽免使用循环尤其双层三层循环它们天生就是常慢的。

2)算法中尽使用向操作因为 Numpy 和 OpenCV 对向操作 了优化。

3)利用缓存一致性。

4)没有必要的就不复制数组,使用图来代替复制,数组复制是常常浪费资源的。
优化后如果还是很慢, 应尝使用其他的包,比如Cython来加载程序。

2.测试代码;

import cv2
import numpy as np img1 = cv2.imread('test.jpg') e1 = cv2.getTickCount()
for i in range(5,49,2):
img1 = cv2.medianBlur(img1,i)
e2 = cv2.getTickCount()
time = (e2-e1)/cv2.getTickFrequency()
print(time)

参考

1.程序性能测试及优化

2. ipython学习笔记

opencv-python教程学习系列9-程序性能检测及优化的更多相关文章

  1. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  2. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

  3. opencv-python教程学习系列3-视频操作

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍视频的获取和保存,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  4. opencv-python教程学习系列13-图像平滑

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像平滑,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

  5. opencv-python教程学习系列12-图像阈值

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像阈值/二值化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  6. opencv-python教程学习系列11-几何变换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

  7. opencv-python教程学习系列10-颜色空间转换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍颜色空间转换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系 ...

  8. opencv-python教程学习系列8-opencv图像算术运算

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的算术运算,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  9. opencv-python教程学习系列7-opencv图像基本操作

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的基本操作,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

随机推荐

  1. Jenkins 对项目持续集成的配置之二 API接口自动化 Ant+Jmeter

    先介绍一下Ant+Jmeter 略 我的另一篇文章有讲在linux上部署ant + jmeter以满足CI持续化集成 https://www.cnblogs.com/qianjinyan/p/9067 ...

  2. MongoDB(课时21 索引)

    3.5 索引(重点) 任何数据库中,索引都是一种提升数据库检索性能的手段,这一点在MongoDB数据库中同样是存在的,MongoDB数据库里面存在两种索引创建:一是自动创建,另外是手工创建. 范例:重 ...

  3. Blue_Flke团队项目设计完善&编码测试

    任务1:文档<软件设计方案说明书>github地址:https://github.com/13993013291/ruanjianguigexuqiu 任务2:项目集成开发环境:eclip ...

  4. python数据持久存储-pickle模块

    pickle模块实现了基本的数据序列和反序列化.pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象. 接 ...

  5. Codeforces 834C - The Meaningless Game

    834C - The Meaningless Game 数学. 思路1:判断a•b能不能化成v3且a%v==0且b%v==0.v可以直接用pow求(或者用cbrt),也可以二分求:还可以用map映射预 ...

  6. Xshell Xftp 免费版 (xshell6 评估期已过 解决办法)

    xshell6 评估期已过,因为下载的版本是evaluation版本,是有期限的. 大家可以修改为Home and school use 的版本,这样就不会出现这个提示了. 具体的操作步骤如下: 1. ...

  7. JS-Object(2) 原型对象 ,prototype属性。

    基础✅ prototype(✅) JS中的继承 使用JSON数据 构建对象实战 基础 关键字"this"指向了当前代码运行时的对象( 原文:the current object t ...

  8. 使用opatch工具 打补丁Patch 21352635 -(Database Patch Set Update 11.2.0.4.8)

    Patch 21352635 - Database Patch Set Update 11.2.0.4.8 一.OPatch工具检查及升级 OPatch工具包,在安装目录$ORACLE_HOME下,P ...

  9. 无法安装Java,以下开关中存在错误:“0”

    无法安装Java,以下开关中存在错误:“0”:. 解决方法:以管理员运行

  10. 如何解决Css属性text-overflow:ellipsis 不起作用(文本溢出显示省略号)

    如何使text-overflow:elipsis起作用? 想要使用css属性text-overflow:elipsis起到作用,样式必须跟overflow:hidden; white-space:no ...