Python 填充形状的内部

Python 填充形状的内部,python,numpy,geometry,Python,Numpy,Geometry,我正在处理一个我处理很多形状的问题,例如: 这些数组表示为简单的numpy数组,0表示空,任何其他值表示非空 我需要填充内部空间为空的形状,例如上面的两个正方形。 但我还没有想出任何简单的解决办法 对包装有什么想法或建议吗 您可以使用: 导入scipy a=np.array([ [0, 0, 1, 1, 1], [0, 0, 1, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0], [2, 2, 2, 0, 0], [2, 0, 2, 0, 0], [2, 2,

我正在处理一个我处理很多形状的问题,例如:

这些数组表示为简单的numpy数组,0表示空,任何其他值表示非空

我需要填充内部空间为空的形状,例如上面的两个正方形。 但我还没有想出任何简单的解决办法

对包装有什么想法或建议吗

您可以使用:

导入scipy
a=np.array([
[0, 0, 1, 1, 1],
[0, 0, 1, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 0, 0, 0],
[2, 2, 2, 0, 0],
[2, 0, 2, 0, 0],
[2, 2, 2, 0, 0],
])
b=scipy.ndimage.binary_fill_孔(a)
打印(b.astype(int))
# [[0 0 1 1 1]
#  [0 0 1 1 1]
#  [0 0 1 1 1]
#  [0 0 0 0 0]
#  [1 1 1 0 0]
#  [1 1 1 0 0]
#  [1 1 1 0 0]]
一个问题是它不能保持形状id。如果你想这样做,它可能会有点复杂。。。如果您没有一个形状位于另一个形状内的情况,也许这可以工作:

导入scipy
a=np.array([
[0, 0, 1, 1, 1],
[0, 0, 1, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 0, 0, 0],
[2, 2, 2, 0, 0],
[2, 0, 2, 0, 0],
[2, 2, 2, 0, 0],
])
b=np.类零(a)
对于范围内的i(a.max()):
形状=i+1
b+=形状*scipy.ndimage.binary\u填充孔(a==形状)
印刷品(b)
# [[0 0 1 1 1]
#  [0 0 1 1 1]
#  [0 0 1 1 1]
#  [0 0 0 0 0]
#  [2 2 2 0 0]
#  [2 2 2 0 0]
#  [2 2 2 0 0]]
还有一些复杂的案件。例如,输入:

1
1 0 2
2 2 2

将在第一个代码段中生成所有代码,而在第二个代码段中不进行任何更改。根据具体需要,您可以根据需要调整代码。

这似乎是一个检测和填充边界框的问题。这可能会有帮助,你肯定可以看到问题本身。尽管如此,我认为更直接的方法是填充边界框之外的所有空值,然后如果有任何空值,它们就是形状的内部。我看了你提到的帖子,但我没有想到如何在这个问题上使用它,你的想法是什么?可能会有所帮助,但如果您有不同的数字来表示不同的形状,并且希望将它们分开,则可能需要循环查看形状ID或其他内容。您所说的“填充”是什么意思?您希望那里有什么而不是0?你想要什么样的连续性?例如,在第一幅图中,右上角的孔?@jdehesa这正是我所需要的!太棒了,谢谢你的帮助。你不想回答这个问题吗?