Python NumPy如何填充二进制数组顶点围合的空白区域
实现方案
你当前需要填充的是四个顶点围成的轴对齐矩形区域,直接通过坐标范围做numpy切片赋值即可,不需要复杂的填充逻辑。
完整代码
import numpy as np import itertools import matplotlib.pyplot as plt verts = np.array(list(itertools.product((0,2), (0,2)))) arr = np.zeros((5, 5)) # 提取四个顶点的行列最值,确定矩形边界 row_min, row_max = verts[:, 0].min(), verts[:, 0].max() col_min, col_max = verts[:, 1].min(), verts[:, 1].max() # numpy切片为左闭右开区间,因此最大值位置需要+1才能覆盖到顶点 arr[row_min:row_max+1, col_min:col_max+1] = 1 print(arr) plt.imshow(arr) plt.show()
运行结果
代码执行后打印的数组完全匹配目标结果:
[[1., 1., 1., 0., 0.], [1., 1., 1., 0., 0.], [1., 1., 1., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]
补充说明
- 该写法是轴对齐矩形填充效率最高的实现,时间复杂度为常数级,和数组尺寸无关
- 逻辑通用:只要是轴对齐的矩形顶点集,不管顶点坐标怎么变,都可以通过取行列最值的方式快速确定填充范围
- 如果后续需要填充非轴对齐的任意多边形区域,可以换用
cv2.fillPoly或者scipy.ndimage.binary_fill_holes类的方法实现
内容的提问来源于stack exchange,提问作者Saraha
相关产品推荐
相关产品推荐

