In [41]: img = np.random.randint(0,255,(800,600))
# @Manel Fornos's Scipy based rotate func
In [42]: %timeit rotate(img, 90)
10 loops, best of 3: 60.8 ms per loop
In [43]: %timeit np.rot90(img,axes=(-2,-1))
100000 loops, best of 3: 4.19 µs per loop
In [44]: %timeit img.swapaxes(-2,-1)[...,::-1,:]
1000000 loops, best of 3: 480 ns per loop
不使用
np.rot90
顺时针旋转的一种解决方案是交换最后两个轴,然后翻转最后一个轴-对于逆时针旋转,翻转第二个最后轴-
对于
np.rot90
,逆时针旋转将是-样本运行-
运行时测试
因此,对于旋转
90
度或其倍数,基于numpy.dot
或swapping axes
的旋转在性能上看起来非常好,而且更重要的是,不执行任何插值,否则将更改值,如Scipy的基于旋转的函数所做的那样。另一种选择
你可以使用^{} ,我认为它比
numpy.rot90
更有用例如
更新(注意插值)
如果你注意旋转的图像,你会看到左边的黑色边框,这是因为Scipy使用插值。所以,实际上图像已经改变了。但是,如果这对您是一个问题,有许多选项可以删除黑边框。
看这个post。
相关问题 更多 >
编程相关推荐