2016-04-09 2 views
0

У меня есть два массива 3D-памяти, каждый из которых представляет изображение (x, y, rgb). Я хочу записать меньшее изображение на большее изображение, за исключением любых пурпурных пикселей (255, 0, 255). Я знаю, как создать 2D-маску, представляющую все пурпурные пиксели, - как я могу использовать эту 2D-маску в операции 3D-массива?Запись 3D-массива numpy в срез большего 3D-массива с использованием 2D-маски

ответ

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 будет больше шансов на поддержку? –