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

时间:2017-09-14 21:59:58

标签: python numpy python-imaging-library

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

  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

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

{{1}}

如何更改此项以达到预期效果?

1 个答案:

答案 0 :(得分:1)

在最后一个轴上使用ALL-reduced的掩码,然后简单地索引到输入数组中以分配boolean-indexing之后的值,就像这样 -

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]]])