替换 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]
我有一个 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]