【发布时间】:2020-07-14 10:26:14
【问题描述】:
我正在尝试从 numpy 数组中提取非零值的矩形组。 数组可能看起来像这样(但要大得多):
a = np.array([
[0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,1,1,1,1,1,0],
[0,0,0,0,6,1,1,1,3,1,0],
[0,0,0,0,0,1,1,1,1,1,0],
[0,0,0,0,2,2,2,0,1,0,0],
[0,0,0,0,2,2,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0],
[1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,0,0,0,0,7,2,0],
[1,1,1,1,0,0,0,0,0,0,0]])
我想提取大于给定大小(例如大于 3x3)的非零值的组/块,即这些块的最小和最大角的坐标。 在这个例子中,我应该得到以下信息:
res = [[(7,0), (10,4)],
[(1,5), (4,10)]]
这样
In [12]: xmin, ymin = res[0][0]
In [13]: xmax, ymax = res[0][1]
In [14]: a[xmin:xmax, ymin:ymax]
Out[14]:
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
In [15]: xmin, ymin = res[1][0]
In [16]: xmax, ymax = res[1][1]
In [17]: a[xmin:xmax, ymin:ymax]
Out[17]:
array([[1, 1, 1, 1, 1],
[1, 1, 1, 3, 1],
[1, 1, 1, 1, 1]])
我尝试查看数组的每个非零值,并从此时开始增长所需大小的形状,直到它包含零。 它可以工作,但速度很慢。 对于这个示例数组,大约需要 1.17 毫秒, 在实际应用程序(即 600x1000 阵列)中大约需要 18 秒,这太慢了。 是否有 numpy 或 OpenCV 函数或技巧可以更快地执行此操作?
【问题讨论】:
-
你的数组是什么数据?
-
它们是深度图像,包含每个像素从相机到现实生活对象的距离(以米为单位)