gpt4 book ai didi

python - 使用numpy为特定值的像素制作掩码数组

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:57 25 4
gpt4 key购买 nike

在处理图像时,我想忽略所有白色像素。我认为最好的方法是设置掩码数组,以在初始化它后立即更改存在白色像素的掩码数组。为此,我使用以下代码最后一行描述的方法。

with PIL.Image.open(picture) as im:
pix = numpy.array(im, dtype=numpy.float)
[height, width, _] = pix.shape
mask = numpy.zeros((height,width))
mask[numpy.argwhere(pix == [255,255,255])] = 1

但是,此行会生成以下错误:

  File "C:\Users\Alec\zone_map.py", line 19, in zone_map
mask[numpy.argwhere(pix == [255,255,255])] = 1

IndexError: index 5376 is out of bounds for axis 0 with size 4000

如何更改此设置以实现所需的结果?

最佳答案

沿着最后一个轴使用ALL-reduced掩码,并简单地索引到输入数组中以在 bool 索引之后分配值,就像这样 -

mask = (pix==255).all(axis=-1)
pix[mask] = 1

示例运行 -

In [18]: pix
Out[18]:
array([[[ 5, 11, 10],
[ 9, 5, 11],
[ 11, 10, 9],
[255, 255, 255]],

[[ 9, 8, 8],
[ 10, 8, 9],
[255, 255, 255],
[ 5, 8, 10]]])

In [19]: mask = (pix==255).all(-1)

In [21]: pix[mask] = 1

In [22]: pix
Out[22]:
array([[[ 5, 11, 10],
[ 9, 5, 11],
[11, 10, 9],
[ 1, 1, 1]],

[[ 9, 8, 8],
[10, 8, 9],
[ 1, 1, 1],
[ 5, 8, 10]]])

关于python - 使用numpy为特定值的像素制作掩码数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com