替换 RGBA numpy 数组中的像素值

Replace pixel value in RGBA numpy array

我有一个 RGBA 值的二维数组(例如:[30, 60, 90, 255]),我想用 [0 0 0 0] 替换所有白色 [255 255 255 255]。最简单的方法是什么?

我尝试使用 for 循环将新数组分配给索引,但索引没有改变:

data = np.array(img)
for y in range(img.size[0]):
    for x in range(img.size[1]):
        if (data[x][y] == [255, 255, 255, 255]).all():
            data[x][y] == [0, 0, 0, 0] # Doesn't change value at index?

您可以使用 np.all 检查每行和每列的所有四个值:

>>> img = np.array([[[220, 119, 177, 145],
                     [255, 255, 255, 255]],

                    [[  3,  67,  69,  74],
                     [  1, 104, 120,  98]]])

获取具有布尔条件的索引掩码 [255, 255, 255, 255]:

>>> mask = np.all(img == [255, 255, 255, 255], axis=-1)
array([[False,  True],
       [False, False]])

此时,您可以使用 mask:

分配一个四元素列表或一个元素
>>> img[mask] = 0
array([[[220, 119, 177, 145],
        [  0,   0,   0,   0]],

       [[  3,  67,  69,  74],
        [  1, 104, 120,  98]]])
data[x][y] == [0, 0, 0, 0] # Doesn't change value at index?

应该是:

data[x][y] = [0, 0, 0, 0]