赞
踩
图片处理是最常见的任务之一。如果是熟悉计算机视觉方向的肯定对OpenCV+Numpy的方案不陌生:用OpenCV读取图片,用Numpy的矩阵操作快速完成处理。由于OpenCV支持所有格式的图片,而Numpy对于其内置的算法都实现了CPU端的并行化,因此这一套流程可以很方便又快速地实现图片处理。
然而,当且仅当你的处理算法可以用Numpy的操作实现时,才能够得到满意的加速效果。如果你的算法需要遍历矩阵,效率就会大大折扣。我之前写了一篇如何使用NVidia的Falcor框架来实现快速的图片处理的文章,感兴趣的可以了解一下。但是这个方案要求大家熟悉shader的编写,对于不太了解图形学的人来说可能稍微有些吃力。在这篇文章里我会分析一些简单的替代方案。
Numba是一个很简单的提高矩阵遍历速度的工具。只需要在你定义的函数前加上@numba.jit(),其就会自动对函数中的循环进行加速。使用的例子如下:
- import numba as nb
- import numpy as np
- @nb.jit()
- def nb_cpy(a):
- result = np.zeros(a.shape, np.float32)
- for i in range(len(a)):
- result[i] = a[i]
- return result
但是直接这样使用其只会使用CPU来加速遍历,实际测试中效率的提升并不是很显著。如果希望使用GPU来进行加速,就会相对麻烦一些(需要一些CUDA知识),超过了本篇的讨论范围,具体可以参考一些
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。