Python 如何按区域对regionprops中的区域进行排序?
我在用python做一些OCR,为了得到图像中字母的坐标,我取一个区域的质心(由regionprops从skimage.measure返回),如果一个质心与其他质心之间的距离小于某个值,我会删除该区域,我认为这可以解决多个区域的问题,一个在其他区域内,但我忽略了,如果首先检测到面积较小的区域(就像字母的一部分),则忽略所有较大的区域(可能包含整个字母),下面是我的代码Python 如何按区域对regionprops中的区域进行排序?,python,ocr,scikit-image,Python,Ocr,Scikit Image,我在用python做一些OCR,为了得到图像中字母的坐标,我取一个区域的质心(由regionprops从skimage.measure返回),如果一个质心与其他质心之间的距离小于某个值,我会删除该区域,我认为这可以解决多个区域的问题,一个在其他区域内,但我忽略了,如果首先检测到面积较小的区域(就像字母的一部分),则忽略所有较大的区域(可能包含整个字母),下面是我的代码 centroids = [] for region in regionprops(label_image):
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返回的列表进行排序?如果你能给出一个更好的方法来避免一个区域在另一个区域内的问题,那就要提前感谢这个参数使用键=
参数,一个用来排序的函数,以及一个反向=
参数来按降序排序。因此,您可以将循环更改为:
已排序区域的(
区域道具(标签和图像),
键=λr:r.面积,
反向=真,
):
要检查一个区域是否完全包含在另一个区域中,可以使用r.bbox
,并检查一个框是否位于另一个框内或重叠
最后,如果您有很多区域,我建议您在运行循环之前使用所有质心构建一个区域,因为这样可以更快地检查区域是否接近现有区域