有没有办法在非零numpy数组值周围创建多个边界框



我有一个图像的numpy数组。我为我感兴趣的区域设置了非零值,其余的设置为0。现在,如果我要创建一个边界框,我可以检查非零值的第一次出现和最后一次出现,并获得坐标。但是如果非零值在不同的地方呢?

如何创建两个边界框而不是一个?

我试过了-

A = array([[0, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0]])

我期待着在一号周围有两个边界框。

我在自己的项目中测试了类似的代码,但没有测试这个特定的代码片段。如果你遇到任何错误,请发表评论。

import cv2
import numpy as np
A = np.array([[0, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0]])
_, markers = cv2.connectedComponents(np.expand_dims(A.astype(np.uint8),axis=2),connectivity=4)
markers = np.squeeze(markers)
bounding_boxes = []
for label in range(1,int(np.max(markers))+1):
locations = np.transpose(np.nonzero(markers==label))
min_x, max_x, min_y, max_y = np.min(locations[:,1]), np.max(locations[:,1]), np.min(locations[:,0]), np.max(locations[:,0])
bounding_boxes.append((min_x, max_x, min_y, max_y))
print(bounding_boxes)

最新更新