将函数应用于蒙版的numpy数组

时间:2016-04-05 09:11:12

标签: python-2.7 numpy mask

我的图像是numpy数组和图像掩码。

from scipy.misc import face

img = face(gray=True)
mask = img > 250

如何将函数应用于所有蒙版元素?

def foo(x):
    return int(x*0.5) 

1 个答案:

答案 0 :(得分:3)

对于该特定功能,可列出的方法很少。

方法#1:您可以使用boolean indexing进行就地设置 -

img[mask] = (img[mask]*0.5).astype(int)

方法#2:您还可以使用np.where获得更直观的解决方案 -

img_out = np.where(mask,(img*0.5).astype(int),img)

对于语法为np.where的{​​{1}},我们在两个相等形状的数组np.where(mask,A,B)A之间进行选择,以生成一个形状相同的新数组BA。选择基于B中的元素进行选择,mask的形状与AB的形状相同。因此,对于True中的每个mask元素,我们选择A,否则选择B。将此翻译为我们的案例,A(img*0.5).astype(int)Bimg

方法#3:内置的np.putmask似乎最接近这个确切的任务,可以用来进行就地设置,就像这样 -

np.putmask(img, mask, (img*0.5).astype('uint8'))