python - Numpy - 修改匹配值旁边的值

标签 python numpy

我有一个图像作为一个 numpy 数组。我试图通过将旁边的任何像素设置为相同的特定颜色来放大具有特定颜色的对象。

但是,我找不到解决这个问题的方法。有什么建议如何做到这一点?

下面是我的问题的一个稍微简化的例子。 如何找到并更新下面数组中 12 旁边的值?

In[1]:import numpy as np
In[2]:z = np.arange(25).reshape(5,5)
In[3]: z
Out[4]: 
array([[ 0,  1,  2,  3,  4],
   [ 5,  6,  7,  8,  9],
   [10, 11, 12, 13, 14],
   [15, 16, 17, 18, 19],
   [20, 21, 22, 23, 24]])

生成如下所示的更新数组(更新 z[2,1] 和 z[2,3] 中的值):

array([[ 0,  1,  2,  3,  4],
   [ 5,  6,  7,  8,  9],
   [10, 12, 12, 12, 14],
   [15, 16, 17, 18, 19],
   [20, 21, 22, 23, 24]])

非常感谢任何建议!

最佳答案

使用Scipy's binary dilation在匹配的掩码上创建一个扩张的掩码,它可以用于 boolean-indexing 以将所有相邻元素(包括匹配元素本身)更改为匹配数字。

因此,实现将是 -

from scipy.ndimage.morphology import binary_dilation

mask = binary_dilation(z==12,[[1,1,1]]) # create dilated mask
z[mask] = 12 # use dilated mask to change elements

sample 运行-

In [42]: z   # Input array
Out[42]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

In [43]: from scipy.ndimage.morphology import binary_dilation

In [44]: mask = binary_dilation(z==12,[[1,1,1]])

In [45]: z[mask] = 12

In [46]: z    # Input array modified
Out[46]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 12, 12, 12, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

关于python - Numpy - 修改匹配值旁边的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45263922/

相关文章:

python - 如何对 `numpy.ndarray` 进行子集化,其中另一个沿某个轴最大?

python - 如何让机器人在discord.py 中不区分大小写?

python - 索引错误 : tuple index out of range with write to txt file

python - NumPy bitwise_and 函数的简化

Python 谷歌文档字符串格式 : more than one type for argument?

python - 当列数是动态的时,如何从数据框中过滤数据?

python - 重新排列 numpy 数组中的子数组?

多个模块的 Python 单元测试覆盖率

python - 了解 OSX 中的 $PYTHONPATH

python - 在 python 2.7 中更新 openssl