如何按区域对regionprops中的区域进行排序?

2024-10-06 08:01:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用python做一些OCR,为了得到图像中字母的坐标,我取一个区域的质心(由regionprops从skimage.measure返回),如果一个质心与其他质心之间的距离小于某个值,我会删除该区域,我认为这可以解决多个区域的问题,一个在其他区域内,但我忽略了,如果首先检测到面积较小的区域(就像字母的一部分),则忽略所有较大的区域(可能包含整个字母),下面是我的代码

 centroids = []
    for region in regionprops(label_image):
       if len(centroids) == 0:
           centroids.append(region.centroid[1])
           do some stuff...
       if len(centroids) != 0:
           distances = []
           for centroid in centroids:
              distance = abs(centroid - region.centroid[1])
              distances.append(distance)
           if all(i >= 0.5 * region_width for i in distances):
              do some stuff...
           centroids.append(region.centroid[1])

现在这里的问题是,是否有一种方法可以按区域对regionprops返回的列表进行排序?以及如何做到这一点?或者,如果您可以提供更好的方法来避免另一个区域内的区域问题,请提前感谢


Tags: in区域forlenif字母somedo
1条回答
网友
1楼 · 发布于 2024-10-06 08:01:32

Python built-in ^{}接受一个key=参数(一个用于排序的函数)和一个reversed=参数(按降序排序)。因此,您可以将循环更改为:

    for region in sorted(
            regionprops(label_image),
            key=lambda r: r.area,
            reverse=True,
    ):

要检查一个区域是否完全包含在另一个区域中,可以使用r.bbox,并检查一个框是否位于另一个框内,或者是否重叠

最后,如果您有很多区域,我建议您在运行循环之前构建一个包含所有质心的^{},因为这样可以更快地检查区域是否接近现有区域

相关问题 更多 >