Python 在numpy中移动图像

Python 在numpy中移动图像,python,numpy,slice,Python,Numpy,Slice,我有一个2d numpy数组中的图像。我想将图像移动X和Y偏移量,并用零填充帧的其余部分。我见过关于“滚动”功能的讨论,但它只在1轴上起作用。(除非有人能给我指一个带填充的2d版本)。我试过切片,但当偏移量有所有可能的方向时,我遇到了麻烦。我不想浏览所有的X-Y偏移+/-排列。有一个简单的通用解决方案吗?我有下面的代码,对于X-offset=+100非常有效。但它在X偏移量=-100时崩溃 谢谢, 格特 没有其他方法可以相应地处理消极和积极的变化: non = lambda s: s if s&

我有一个2d numpy数组中的图像。我想将图像移动X和Y偏移量,并用零填充帧的其余部分。我见过关于“滚动”功能的讨论,但它只在1轴上起作用。(除非有人能给我指一个带填充的2d版本)。我试过切片,但当偏移量有所有可能的方向时,我遇到了麻烦。我不想浏览所有的X-Y偏移+/-排列。有一个简单的通用解决方案吗?我有下面的代码,对于X-offset=+100非常有效。但它在X偏移量=-100时崩溃

谢谢, 格特


没有其他方法可以相应地处理消极和积极的变化:

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)]

non=lambda s:s如果s可以使用滚动函数循环移动x和y,然后将偏移量归零

def shift_image(X, dx, dy):
    X = np.roll(X, dy, axis=0)
    X = np.roll(X, dx, axis=1)
    if dy>0:
        X[:dy, :] = 0
    elif dy<0:
        X[dy:, :] = 0
    if dx>0:
        X[:, :dx] = 0
    elif dx<0:
        X[:, dx:] = 0
    return X
def shift_图像(X,dx,dy):
X=np.滚动(X,dy,轴=0)
X=np.滚动(X,dx,轴=1)
如果dy>0:
X[:dy,:]=0
elif dy0:
X[:,:dx]=0
elif dx
def shift_image(X, dx, dy):
    X = np.roll(X, dy, axis=0)
    X = np.roll(X, dx, axis=1)
    if dy>0:
        X[:dy, :] = 0
    elif dy<0:
        X[dy:, :] = 0
    if dx>0:
        X[:, :dx] = 0
    elif dx<0:
        X[:, dx:] = 0
    return X