2016-04-09 155 views
0

我有两个3D numpy阵列,每个阵列都代表一个图像(x,y,rgb)。我想将较小的图像写入较大的图像,除了任何洋红色像素(255,0,255)。我知道如何生成代表所有洋红色像素的2D遮罩 - 我如何在3D阵列操作中使用此2D遮罩?使用2D蒙版将3D numpy阵列写入更大3D阵列的切片

回答

2

下面是一个例子。这不完全准确(所有的值都是一两个),但给出了这个想法。希望这部作品在您的情况:

image1 = np.ones((5,5,16)) 
image2 = 2 * np.ones((3,3,16)) 
mask = np.array([[0, 1, 1], [0, 0, 1], [1, 0, 0]]) 
x, y = np.where(mask) 
image1[1:4,1:4,:][x,y,:] = image2[x,y,:] 

1:4,1:4是较大的图像内的子图像的位置)

+0

对于那些试图在numpypy利用这一点,它不会工作 - 显然[1 -arg哪里还没有实现。](https://bitbucket.org/pypy/numpy/issues/41/implementation-of-1-arg-numpywhere)还有另一种方法,pypy有更好的支持机会吗? –