如何进行图片的平移,滚卷?
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进行操作。
OpenFramework中视频或者图片进行中心旋转平移放大缩小矫正(本例以视频为准,只给出主要代码)