我的图像是numpy数组和图像掩码。
from scipy.misc import face
img = face(gray=True)
mask = img > 250
如何将函数应用于所有蒙版元素?
def foo(x):
return int(x*0.5)
答案 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
之间进行选择,以生成一个形状相同的新数组B
和A
。选择基于B
中的元素进行选择,mask
的形状与A
和B
的形状相同。因此,对于True
中的每个mask
元素,我们选择A
,否则选择B
。将此翻译为我们的案例,A
为(img*0.5).astype(int)
,B
为img
。
方法#3:内置的np.putmask
似乎最接近这个确切的任务,可以用来进行就地设置,就像这样 -
np.putmask(img, mask, (img*0.5).astype('uint8'))