查找和绘制边界框

finding and drawing bounding boxes

我目前有一个二维值数组。我目前正试图找到它的值明显不同的区域,并在它们周围绘制边界框。

目前,我已经使用 scikit-image 来设置我的值的阈值,方法是

from skimage import filters
val = filters.threshold_otsu(zo)
mask = zo < val

这个面具给了我一组真假,比如:

[[F, T, T, F],
 [F, T, F, F],
 [F, F, F, F],
 [F, F, F, T]
]

现在,我想使用它在 Trues 的两组中的每一个周围绘制一个矩形。但是,我发现很难执行此操作。 OpenCV 似乎能够使用函数 cv2.boundingRect() 简单地执行这样的操作(参见:Drawing bounding rectangles around multiple objects in binary image in python)。但是,由于我的原始对象不是图像,所以我没有使用它。

Python中是否有一个简单的函数来计算边界框的面积(有点像cv2.boundingRect()),或者像上面那样将二维矩阵传递给OpenCV的方法可以直接使用吗?

这里有一个在 scikit-image gallery 中绘制关于区域的边界框的示例:

https://scikit-image.org/docs/0.18.x/auto_examples/segmentation/plot_regionprops.html

你需要两件事:

(1) label 您的区域,以便它们是两个不同的区域。即您上面的图像将变为:

[[0, 1, 1, 0],
 [0, 1, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0, 2]]

(2) 使用regionpropsprops.bbox找到每个区域的边界框,然后你可以用它在matplotlib或你选择的软件中绘制。

因此,在 example 中搜索“label”和“bbox”以查看用法示例。