查找和绘制边界框
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) 使用regionprops和props.bbox
找到每个区域的边界框,然后你可以用它在matplotlib或你选择的软件中绘制。
因此,在 example 中搜索“label”和“bbox”以查看用法示例。
我目前有一个二维值数组。我目前正试图找到它的值明显不同的区域,并在它们周围绘制边界框。
目前,我已经使用 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) 使用regionprops和props.bbox
找到每个区域的边界框,然后你可以用它在matplotlib或你选择的软件中绘制。
因此,在 example 中搜索“label”和“bbox”以查看用法示例。