我在用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返回的列表进行排序?以及如何做到这一点?或者,如果您可以提供更好的方法来避免另一个区域内的区域问题,请提前感谢
Python built-in ^{} 接受一个
key=
参数(一个用于排序的函数)和一个reversed=
参数(按降序排序)。因此,您可以将循环更改为:要检查一个区域是否完全包含在另一个区域中,可以使用
r.bbox
,并检查一个框是否位于另一个框内,或者是否重叠最后,如果您有很多区域,我建议您在运行循环之前构建一个包含所有质心的^{} ,因为这样可以更快地检查区域是否接近现有区域
相关问题 更多 >
编程相关推荐