如何进行图片的平移,滚卷?

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何进行图片的平移,滚卷?相关的知识,希望对你有一定的参考价值。

简 介: 利用roll, shift函数可以完成对于一维,二维,三维数组的平移、滚卷。利用这种方式对音频信息、图像信息进行操作非常方便。本文中测试这这些方法具体使用方法和效果。

关键词 平移滚卷图片

数组的平移滚卷
文章目录
对于一维数组
对于二维数组
平移填充最后一行
图片的平移滚卷
图片的滚卷
图片的平移
实验总结

 

§01 组平移、滚卷


  组的平移(shift)和滚卷(roll)在应用中经常碰到。比如使用数组表示图片,如果需要对于图片进行平移操作,利用数组则比较方便。

  在 Python NumPy Shift Array 介绍了三种numpy数组平移和滚卷的方法:

  • NumPy Shift Array With the np.roll() Method
  • NumPy Shift Array With the Slicing Method in Python
  • NumPy Shift Array With shift() Function Inside the scipy.ndimage.interpolation Library in Python

1.1 对于一维数组

1.1.1 利用numpy的roll函数

  下面使用Numpy中的roll函数,对于一维数组进行滚卷,可以看到:

  • 它可以往两个方向进行滚卷;
  • 输出的结果为: numpy array.
a = list(range(10))
b = roll(a, 2)
c = roll(a, -3)
print("a: ".format(a), "b: ".format(b), "c: ".format(c))
a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b: [8 9 0 1 2 3 4 5 6 7]
c: [3 4 5 6 7 8 9 0 1 2]

1.1.2 利用shift函数进行平移

def shift(arr, num, fill_value):
    result = empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr

    return result

a = list(range(10))
b = shift(a, 2, 99)
c = shift(a, -3, 99)
print("a: ".format(a), "b: ".format(b), "c: ".format(c))
a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b: [99 99  0  1  2  3  4  5  6  7]
c: [ 3  4  5  6  7  8  9 99 99 99]

1.1.3 interpolation

from scipy.ndimage.interpolation import shift

a = list(range(10))
b = shift(a, 2, cval=99)
c = shift(a, -3, cval=99)
print("a: ".format(a), "b: ".format(b), "c: ".format(c))
a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b: [99 99  0  1  2  3  4  5  6  7]
c: [ 3  4  5  6  7  8  9 99 99 99]

1.2 对于二维数组

1.2.1 利用numpy的roll函数

x,y = meshgrid(range(10), range(10))
a = x+y
b = roll(a, 2)
c = roll(a, -3)
print("a: \\n".format(a), "b: \\n".format(b), "c: \\n".format(c))
a: [[ 0  1  2  3  4  5  6  7  8  9]
 [ 1  2  3  4  5  6  7  8  9 10]
 [ 2  3  4  5  6  7  8  9 10 11]
 [ 3  4  5  6  7  8  9 10 11 12]
 [ 4  5  6  7  8  9 10 11 12 13]
 [ 5  6  7  8  9 10 11 12 13 14]
 [ 6  7  8  9 10 11 12 13 14 15]
 [ 7  8  9 10 11 12 13 14 15 16]
 [ 8  9 10 11 12 13 14 15 16 17]
 [ 9 10 11 12 13 14 15 16 17 18]]

b: [[17 18  0  1  2  3  4  5  6  7]
 [ 8  9  1  2  3  4  5  6  7  8]
 [ 9 10  2  3  4  5  6  7  8  9]
 [10 11  3  4  5  6  7  8  9 10]
 [11 12  4  5  6  7  8  9 10 11]
 [12 13  5  6  7  8  9 10 11 12]
 [13 14  6  7  8  9 10 11 12 13]
 [14 15  7  8  9 10 11 12 13 14]
 [15 16  8  9 10 11 12 13 14 15]
 [16 17  9 10 11 12 13 14 15 16]]

c: [[ 3  4  5  6  7  8  9  1  2  3]
 [ 4  5  6  7  8  9 10  2  3  4]
 [ 5  6  7  8  9 10 11  3  4  5]
 [ 6  7  8  9 10 11 12  4  5  6]
 [ 7  8  9 10 11 12 13  5  6  7]
 [ 8  9 10 11 12 13 14  6  7  8]
 [ 9 10 11 12 13 14 15  7  8  9]
 [10 11 12 13 14 15 16  8  9 10]
 [11 12 13 14 15 16 17  9 10 11]
 [12 13 14 15 16 17 18  0  1  2]]

1.2.2 利用shift函数

def shift(arr, num, fill_value):
    result = empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr

    return result

x,y = meshgrid(range(10), range(10))
a = x+y

b = shift(a, 2, 99)
c = shift(a, -3, 99)
print("a: ".format(a), "b: ".format(b), "c: ".format(c))
a: [[ 0  1  2  3  4  5  6  7  8  9]
 [ 1  2  3  4  5  6  7  8  9 10]
 [ 2  3  4  5  6  7  8  9 10 11]
 [ 3  4  5  6  7  8  9 10 11 12]
 [ 4  展示图片和平移滑动

android如何利用matrix类直接对图元进行旋转、平移等操作?而不是对Bitmap进行操作。

Android自定义控件篇 图片进行平移,缩放,旋转

OpenFramework中视频或者图片进行中心旋转平移放大缩小矫正(本例以视频为准,只给出主要代码)

如何以全分辨率从 UIImageView 获取旋转、缩放和平移的图像?

OpenCV新手入门,如何用它平移缩放和旋转图片