У меня есть два массива 3D-памяти, каждый из которых представляет изображение (x, y, rgb). Я хочу записать меньшее изображение на большее изображение, за исключением любых пурпурных пикселей (255, 0, 255). Я знаю, как создать 2D-маску, представляющую все пурпурные пиксели, - как я могу использовать эту 2D-маску в операции 3D-массива?Запись 3D-массива numpy в срез большего 3D-массива с использованием 2D-маски
0
A
ответ
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
является позиция субизображения внутри большего изображения)
Для тех, кто пытается использовать это в numpypy, он не будет работать - по-видимому, [1 -arg где еще не реализовано.] (https://bitbucket.org/pypy/numpy/issues/41/implementation-of-1-arg-numpywhere) Есть ли другой метод, который у pypy будет больше шансов на поддержку? –