我有一个图像作为一个 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/