Python-OpenCV(5)

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

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

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

实验1

代码:

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

代码:

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 都对向量操作进行了优化

利用高速缓存一致性

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Numpy使用3

    上一篇博客介绍了numpy的几种初始化方式和numpy的数据类型(dtype)和shape的相关知识,这篇介绍numpy矩阵的索引与切片 矢量化 numpy数组...

    GavinZhou
  • Numpy使用2

    上一个博客写到了numpy的特性,如何安装以及功能初探。这一篇就讲讲numpy的常用功能以及与其它python库的结合使用。 假设你已经成功执行下列语句: im...

    GavinZhou
  • sklearn系列之----线性回归

    原理 线性回归,原理很简单,就是拟合一条直线使得损失最小,损失可以有很多种,比如平方和最小等等; ? y是输出,x是输入,输出是输入的一个线性组合。...

    GavinZhou
  • 【Python】10、python内置数

          pop      随机删除一个元素并返回,集合为空返回KeyError,

    py3study
  • Python内置数据结构3

    集合不能修改单个元素,不能通过索引查找,集合没有访问单个元素的方法,集合元素没有顺序,元素必须课hash

    py3study
  • 手机通讯录删除怎么恢复?主要靠它们

      手机通讯录删除怎么恢复?现在的社交工具遍天都是,不过最初的社交工具还属通讯录,毕竟在最初大家都是通过通讯录来交流的,打电话发短信。现在使用的都觉少了也不会在...

    科技第六人
  • SpringBoot整合分页插件

    爱撒谎的男孩
  • 微位科技李子阳:Knocknock諾客—从个人通讯录到区块链身份节点

    移动互联网演进到今天,有三个最基础的通讯录,分别代表了沟通三种通讯形态:IM(Wechat、Whatsapp、Kakao、Line)通讯录,手机本地通讯录,邮箱...

    微位科技
  • 手机通讯录删除了怎么恢复?用过都收藏了

      手机通讯录删除了怎么恢复?相信很多人的手机里面都存在很多的通讯录,不过现在来说通讯录并没有多少人会用了,毕竟现在使用通讯录联系的并不多了,不过还是会有不少人...

    科技第六人
  • 苹果手机通讯录删除怎么恢复?快速找回小技巧

      苹果手机通讯录删除怎么恢复?现在使用通讯录的越来越少了,基本上都在使用微信,我们储存在手机里面的联系人已经没什么用了,很多人会去将手机中不需要的联系人删除,...

    科技第六人

扫码关注云+社区

领取腾讯云代金券