前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-OpenCV(5)

Python-OpenCV(5)

作者头像
GavinZhou
发布2018-01-02 15:23:36
8340
发布2018-01-02 15:23:36
举报

这次咱们比较下,python的函数、numpy的函数和OpenCV的函数的效率问题,让大家对功能相同的情况下如何选择合适的函数有比较直观的认识

程序(语句)运行时间的测量

(1) python的time模块 (2) cv2.getTickCount(),返回时钟数,cv2.getTickFrequency()返回始终频率,相除即可达到运行时间 (3) Ipython的%timeit

实验1

代码:

代码语言:javascript
复制
In [1]: import numpy as np

In [2]: x = 10

In [3]: %timeit y=x**2
10000000 loops, best of 3: 49.7 ns per loop

In [4]: %timeit y=x*x
10000000 loops, best of 3: 33.1 ns per loop

In [5]: c = np.array([x])

In [6]: %timeit y=c*c
1000000 loops, best of 3: 711 ns per loop

In [7]: %timeit y=c**2
1000000 loops, best of 3: 727 ns per loop

In [8]: 

%timeit是Ipython提供的魔法函数,它可以使测试的语句循环多次执行,从而测出比较准确的运行时间 从上面的结果,我们可以看出:

python对标量的运算是比numpy要快的, numpy的优点在于对多维数组的处理远比python快

实验2

代码:

代码语言:javascript
复制
In [13]: import numpy as np

In [14]: import cv2

In [15]: img = cv2.imread('/home/gavinzhou/实验室/ForBlogImage/images/1.png',cv2.IMREAD_GRAYSCALE)

In [16]: img.shape
Out[16]: (397, 550)

In [17]: %timeit z=cv2.countNonZero(img)
100000 loops, best of 3: 14.3 µs per loop

In [18]: %timeit z=np.count_nonzero(img)
1000 loops, best of 3: 366 µs per loop

In [19]: 

从上面的结果我们可以看出:

一般情况下 OpenCV 的函数要比 Numpy 函数快。所以对于相同的操作最好使用 OpenCV 的函数

关于效率优化的一点建议

尽量避免使用双层三层循环,它们非常慢的

算法中尽量使用向量操作, 因为 Numpy 和 OpenCV 都对向量操作进行了优化

利用高速缓存一致性

没有必要的话就不要复制数组。使用视图来代替复制, 数组复制是非常浪费资源的

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 程序(语句)运行时间的测量
    • 实验1
      • 实验2
      • 关于效率优化的一点建议
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档