在numpy中移动图像

时间:2014-11-23 08:47:31

标签: python numpy slice

我有一个2d numpy数组的图像。我想通过X和Y偏移来移动图像,并希望框架的其余部分用零填充。我已经看过关于'roll'功能的讨论,但这只适用于1轴。 (除非有人能指出我带填充的2D版本)。我尝试过切片但是当转移偏移有所有可能的方向时我遇到了麻烦。我不想浏览所有X Y偏移+/-排列。有一个简单的通用解决方案吗?我有以下代码,适用于X-offset = + 100。但它崩溃了X-offset = -100。

谢谢, 格特

import matplotlib.pyplot as plt
import scipy.misc        as msc
import numpy             as np

lena = msc.lena()
lena.dtype
(imx,imy)= lena.shape
ox= 100
oy= 20
shift_lena = np.zeros((imx,imy))
shift_lena[0:imy-oy,0:imx-ox] = lena[oy:,ox:]
shift_lena_m = shift_lena.astype(np.int64)
shift_lena_m.dtype
plt.figure(figsize=(10, 3.6))
plt.subplot(131)
plt.imshow(lena, cmap=plt.cm.gray)
plt.subplot(132)
plt.imshow(shift_lena_m, cmap=plt.cm.gray)
plt.subplots_adjust(wspace=0, hspace=0., top=0.99, bottom=0.01, left=0.05, right=0.99)
plt.show()

2 个答案:

答案 0 :(得分:6)

没有别的方法可以相应地处理消极和积极的转变:

non = lambda s: s if s<0 else None
mom = lambda s: max(0,s)

ox, oy = 100, 20

shift_lena = numpy.zeros_like(lena)
shift_lena[mom(oy):non(oy), mom(ox):non(ox)] = lena[mom(-oy):non(-oy), mom(-ox):non(-ox)]

答案 1 :(得分:0)

您可以使用滚动功能使x和y循环移位,然后将偏移量零填充

# initial value of the temperature
t = float('nan')          
# initial value of minimum temperature, so any measured temp. will be smaller
t_min = float('inf')      
# initial value of maximum temperature, so any measured temp. will be bigger
t_max = float('-inf')     
while True:
    # measure temperature, if sensor is broken t is not changed
    t = measure()     
    # find new minimum temperature
    t_min = min(t_min, t) 
    # find new maximum temperature
    t_max = max(t_max, t)