我有一个图像作为np。数组,形状为(320,240,4)。我想替换所有具有数组值(1,0,0,1)的单个像素,这是红色到绿色的数组值(0,1,0,1)。我试过使用np.all()
,但它不起作用,虽然我没有得到任何错误。下面是我的代码:
mario = mpimg.imread("mario_big.png")
print(mario.shape) # (320, 240, 4)
mario[np.all(mario == (1, 0, 0, 1), axis=-1)] = (0, 1, 0, 1)
luigi = mario
plt.imshow(luigi)
plt.show()
马里奥是这样的:
[[[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
...
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]]
[[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
...
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]]
[[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
...
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]
[0. 0. 0. 0. ]]
...
请建议。
你的代码是工作的(见这个答案):
>>> mario = np.random.randint(0, 2, (3, 2, 4))
array([[[1, 1, 1, 0],
[1, 0, 0, 1]], ## <-
[[0, 0, 1, 0],
[0, 0, 1, 0]],
[[0, 0, 0, 0],
[0, 1, 1, 1]]])
>>> mario[np.all(mario == (1, 0, 0, 1), axis=-1)] = (0, 1, 0, 1)
>>> mario
array([[[1, 1, 1, 0],
[0, 1, 0, 1]], ## <-
[[0, 0, 1, 0],
[0, 0, 1, 0]],
[[0, 0, 0, 0],
[0, 1, 1, 1]]])